今日群中一网友 问了一个问题
例如 将数据为 E:\20121129xx.flv
批量改写为 E:\11\20121129xx.flv
条件为 月份大于0 并且小与13
大体解决思路是这样
1.截取字符串第8 第9位 字符串 得到月份 "11"
2.拼接字符串成“E:\11\”
concat(concat("E:\\",substring(str,1,2)),"\\")
3.替换开头字符"E:\\" 为“E:\11\”
replace(str,"E:\\",concat(concat("E:\\",substring(str,8,2)),"\\"))
4.添加条件 条件 因为月份为数字 需要将字符的数字转成数字
1.比如'0'转成0可以直接用加法来实现
2.比较数字和varchar时,比如a=11,b="11ddddd";
则 select 11="11ddddd"相等
若绝对比较可以这样:
select 11 = binary "11ddddd"
3.字符集转换 : CONVERT(xxx USING gb2312)
类型转换和SQL Server一样,就是类型参数有点点不同 : CAST(xxx AS 类型) , CONVERT(xxx,类型),类型必须用下列的类型:
可用的类型
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
整理条件为
where substring(str,1,2) between 0 and 13
最后的语句为
update xxx set str = replace(str,"E:\\",concat(concat("E:\\",substring(str,8,2)),"\\")) where substring(str,1,2) between 0 and 13