根据模式格式化SQL查询结果

时间:2015-08-13 00:06:04

标签: 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,我希望结果为yyyy/mm/dd

2 个答案:

答案 0 :(得分:1)

测试数据

DECLARE @TABLE TABLE (Dates VARCHAR(20))
INSERT INTO @TABLE VALUES 
('10/05/2015'),
('11/05/2015'),
('1/5/2015'),
('01/5/2014')

查询

以下查询将所有值转换为正确的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

结果

2015-05-10
2015-05-11
2015-05-01
2014-05-01

在格式良好的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

结果

2015/05/10
2015/05/11
2015/05/01
2014/05/01

答案 1 :(得分:0)

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

... WHERE DateTime LIKE "__/__/____" ...