Преобразовать строку символов в этот конкретный формат даты? - PullRequest
0 голосов
/ 05 ноября 2019

Я использую SQL Server 2014, и у меня есть таблица (t1), которая содержит столбец (ReviewDate) в формате nvarchar.

Пример строки этого столбца приведен ниже:

       ReviewDate
  Mr John wrote a review in Oct 2017

Мне нужно извлечь компонент "date" из этой строки символов.

Для этого мой T-SQL выглядит следующим образом:

SELECT (RIGHT([ReviewDate], 8)) as [ReviewDate 2]
FROM t1

Это дает мне «октябрь 2017».

Теперь я хочу преобразовать октябрь 2017 года в формат 2017-10-01 в формате datetime. Вот где я застрял.

Я попробовал следующее:

SELECT CONVERT(datetime, (RIGHT([ReviewDate], 8)), 121) as [ReviewDate2]

Выше синтаксиса выдает следующее сообщение об ошибке: «Преобразование не удалось при преобразовании даты и / или времени из строки символов. "

SELECT CAST( (RIGHT([ReviewDate], 8)) as datetime) as [ReviewDate2]

Приведенный выше синтаксис выдает мне то же сообщение об ошибке:

Преобразование не удалось при преобразовании даты и / или времени из символьной строки.

Будет полезна некоторая помощь.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

Все ваши запросы верны, но убедитесь, что в нем не должно быть никакой другой строки, кроме части даты.

Например, SELECT CAST('x Oct 2017' AS DATE) выдаст ошибку типа

Сбой преобразования при преобразовании даты и / или времени из символьной строки.

SELECT CAST((RIGHT('Mr John wrote a review in Oct 2017', 8)) as datetime) as [ReviewDate2]
SELECT CAST('Oct 2017' AS DATE)
SELECT CONVERT(DATETIME, 'Oct  2017 ', 121) as [ReviewDate2]

FIDDLE DEMO

0 голосов
/ 05 ноября 2019

пока ваш образец текста является действительным datetime в mssql, когда я пытался привести. Кажется, на вашей таблице есть недопустимые данные. попробуйте использовать try_cast() для включения этих неверных данных.

declare @ReviewDate varchar(max)='Mr John wrote a review in Oct 2017'

set  @ReviewDate = (RIGHT(@ReviewDate, 8))

select try_cast(@ReviewDate as datetime) as [ReviewDate2]

dbfiddle <>

...