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

问题描述 投票:-1回答:2

问题:由于可怕的设计,日期存储为字符串。格式是一致的。

该字符串始终存储为:

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

例如:

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

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

附加信息:我不知道那个波浪是什么。我实际上必须使用convert(nvarchar, <field1>, 103)转换列以获得高于输出。这是因为我使用SELECT DISTINCT子句并且需要避免收到以下错误消息:

Msg 421,Level 16,State 1,Line 1 ntext数据类型不能被选为DISTINCT,因为它不具有可比性。

sql sql-server date extract
2个回答
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


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

© www.soinside.com 2019 - 2024. All rights reserved.