SQL查询从常量格式字符串中提取日期

时间:2019-03-25 10:11:57

标签: sql sql-server date extract

问题:由于设计糟糕,日期存储为字符串。格式虽然一致。

字符串始终存储为:

Revised: dd/mm/yyyy 00:00:00 §

例如:

Revised: 09/01/2019 00:00:00 §

所需的解决方案:我需要提取dd / mm / yyyy并尽可能转换为日期。

其他信息:我不知道这是什么。实际上,我必须使用convert(nvarchar, <field1>, 103)来转换列,以获取上述输出。这是因为我使用了SELECT DISTINCT子句,并且需要避免出现以下错误消息:

  

第421条消息的状态16,状态1,第1行
  无法将ntext数据类型选择为DISTINCT,因为它不可比较。

2 个答案:

答案 0 :(得分:0)

由于它遵循严格的模式,因此您可以简单地替换不属于日期时间的位,然后进行转换:

DECLARE @test VARCHAR(255) = 'Revised: 09/01/2019 00:00:00 §'

SELECT  @test --Original value
,       REPLACE(REPLACE(@test, 'Revised: ', ''), ' §', '') --Replaced value
,       CONVERT(DATETIME, REPLACE(REPLACE(@test, 'Revised: ', ''), ' §', ''), 103) --Converted value

由于您的数据类型为ntext,因此必须首先将其转换为varchar

答案 1 :(得分:0)

这可以简单地通过

完成
SELECT TRY_CAST(LEFT(YourColumnName, 10) AS DATE) AS Result
FROM YourTableName;

Demo

如果字符串中有Revised:,您可以这样做

SELECT TRY_CAST(LEFT(REPLACE(YourColumnName, 'Revised: ', ''), 10) AS DATE) AS Result
FROM YourTableName;

Demo