Sql server 基于模式格式化SQL查询结果

Sql server 基于模式格式化SQL查询结果,sql-server,regex,tsql,Sql Server,Regex,Tsql,我有一个包含不同类型日期格式的表: ######## DateTime ######## 10/05/2015 11/05/2015 1/5/2015 01/5/2014 现在我的问题是,如何根据这个模式选择所有的行\d{2}/\d{2}/\d{4}用这个模式\d{4}/\d{2}/\{2}格式化结果? 第一个是dd/mm/yyyy,我希望结果是yyy/mm/dd,在您的情况下,我不需要使用正则表达式。一个简单的例子就足够了 。。。其中DateTime如“\uuuuuuuuuuuuuuuuuu

我有一个包含不同类型日期格式的表:

########
DateTime
########
10/05/2015
11/05/2015
1/5/2015
01/5/2014
现在我的问题是,如何根据这个模式选择所有的行
\d{2}/\d{2}/\d{4}
用这个模式
\d{4}/\d{2}/\{2}
格式化结果?
第一个是
dd/mm/yyyy
,我希望结果是
yyy/mm/dd

,在您的情况下,我不需要使用正则表达式。一个简单的例子就足够了

。。。其中DateTime如“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
查询
以下查询将所有值转换为正确的sql server日期数据类型

SELECT CONVERT(DATE,
       RIGHT('0000' + PARSENAME(REPLACE(Dates , '/','.'),1),4)
     + RIGHT('00'   + PARSENAME(REPLACE(Dates , '/','.'),2),2)
     + RIGHT('00'   + PARSENAME(REPLACE(Dates , '/','.'),3),2)
      )
FROM @TABLE
结果 获得格式良好的sql server日期类型中的值后,可以通过执行以下操作扩展查询以获得所需的输出
yyyy/mm/dd

SELECT  CONVERT(VARCHAR(10), 
      CONVERT(DATE,
       RIGHT('0000' + PARSENAME(REPLACE(Dates , '/','.'),1),4)
     + RIGHT('00'   + PARSENAME(REPLACE(Dates , '/','.'),2),2)
     + RIGHT('00'   + PARSENAME(REPLACE(Dates , '/','.'),3),2)
      ), 111)
FROM @TABLE
结果
Sql server不支持正则表达式,但支持一些模式匹配,因此无法使用正则表达式执行所需操作。除非你使用CLR@JorgeCamposSQL Server似乎可以支持正则表达式,就像我说的,它只是模式匹配,你不能用它来替换。
2015-05-10
2015-05-11
2015-05-01
2014-05-01
SELECT  CONVERT(VARCHAR(10), 
      CONVERT(DATE,
       RIGHT('0000' + PARSENAME(REPLACE(Dates , '/','.'),1),4)
     + RIGHT('00'   + PARSENAME(REPLACE(Dates , '/','.'),2),2)
     + RIGHT('00'   + PARSENAME(REPLACE(Dates , '/','.'),3),2)
      ), 111)
FROM @TABLE
2015/05/10
2015/05/11
2015/05/01
2014/05/01