我有一个值为
的列 AAA_ZZZZ_7890_10_28_2014_123456.jpg
我需要更换中间下划线,以便将其显示为日期,即
AAA_ZZZZ_7890_10-28-2014_123456.jpg
有人可以为此建议一个简单的更新查询。
下划线的数量对于列中的所有值都是相同的,但长度会有所不同,例如有些可以有
AAA_q10WRQ_001_10_28_2014_12.jpg
答案 0 :(得分:0)
试试这个(假设DATE部分始终以相同的字符索引开始)
declare @string varchar(64) = 'AAA_ZZZZ_7890_10_28_2014_123456.jpg'
select replace(@string, reverse(substring(reverse(@string), charindex('_', reverse(@string), 0) + 1, 10)), replace(reverse(substring(reverse(@string), charindex('_', reverse(@string), 0) + 1, 10)), '_', '-'))
答案 1 :(得分:0)
如果第一个
正好有6 _那么选择STUFF('AAA_ZZZZ_7890_10_28_2014_123456.jpg',CHARINDEX('_','AAA_ZZZZ_7890_10_28_2014_123456.jpg',CHARINDEX('_','AAA_ZZZZ_7890_10_28_2014_123456.jpg',CHARINDEX('_','AAA_ZZZZ_7890_10_28_2014_123456.jpg',CHARINDEX( '_','AAA_ZZZZ_7890_10_28_2014_123456.jpg',0)+ 1)+ 1)+ 1),1,' - ')
答案 2 :(得分:0)
以下应该这样做:
http://sqlfiddle.com/#!3/d41d8/30384/0
declare @filename varchar(64) = 'AAA_ZZZZ_7890_10_28_2014_123456.jpg'
declare @datepattern varchar(64) = '%[_][0-1][0-9][_][0-3][0-9][_][1-2][0-9][0-9][0-9][_]%'
select
filename,
substring(filename,1,datepos+2)+'-'+
substring(filename,datepos+4,2)+'-'+
substring(filename,datepos+7,1000)
from
(
select
@filename filename,
patindex(@datepattern,@filename)
as datepos
) t
;
导致
AAA_ZZZZ_7890_10-28-2014_123456.jpg
需要注意的注意事项:
datepos
实际上会在日期之前找到下划线的位置 - 如果在substring
的索引中考虑到这一点,则不会出现问题。NULL
或无穷大,我无法让LEN()
在SQL Fiddle中工作,所以我硬编码了足够大的数字(1000)。对此的更正是受欢迎的。