SQL-запрос для извлечения даты из строки постоянного формата - PullRequest
0 голосов
/ 25 марта 2019

Проблема : из-за ужасного дизайна даты хранятся в виде строк.Формат соответствует, хотя.

Строка всегда сохраняется как:

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

Например:

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

Желаемое решение: Мне нужно извлечь dd /мм / гггг и, если возможно, конвертируйте в дату.

Дополнительная информация : Я не знаю, что это за заглушка.Я на самом деле должен конвертировать столбец, используя convert(nvarchar, <field1>, 103), чтобы получить вывод выше.Это потому, что я использую предложение SELECT DISTINCT, и мне нужно избегать сообщения об ошибке ниже:

Сообщение 421, Уровень 16, Состояние 1, Строка 1
Тип данных ntext не может быть выбран как DISTINCT.потому что это несопоставимо.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Это можно сделать просто с помощью

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

Демо

Если Revised: в строке, вы можете сделать как

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

Демо

0 голосов
/ 25 марта 2019

Поскольку он следует строгому шаблону, вы можете просто заменить биты, которые не являются частью даты и времени, и затем преобразовать:

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.

...