Преобразование строки в дату и время работает с выбором, но не обновлением (T-SQL) - PullRequest
0 голосов
/ 30 ноября 2018

В моей базе данных есть таблица, в которой есть как исходная строка даты ввода пользователя, так и попытка получить дату и время из нее с помощью CONVERT

CREATE TABLE #UserInput 
(
    actualDate DATETIME NULL,
    dateString VARCHAR(50) NULL
)

Оператор

SELECT CONVERT(DATETIME, dateString) 
FROM #UserInput 

отлично работает и корректно преобразует строки в datetime.

Однако, когда я пытаюсь установить столбец actualDate, используя инструкцию

UPDATE X 
SET X.actualDate = CONVERT(DATETIME, X.dateString) 
FROM #UserInput X 

, я получаю сообщение об ошибке:

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

Поскольку я могу выполнить выборку, я знаю, что все строки dateStrings отформатированы правильно и могут быть преобразованы.Так почему же я не могу сделать это с обновлением?

Конкретный формат, который я тестировал, - это мм / дд / гггг чч: мм, но решение должно было бы работать и с другими форматами.

Спасибо за помощь, спасибо.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Простое решение: try_convert():

UPDATE X 
    SET X.actualDate = TRY_CONVERT(DATETIME, X.dateString) 
    FROM #UserInput X ;

Я подозреваю, что проблема в том, что вы не видите все строк в X - только некоторые из них соответствуют,Чтобы проверить это, запустите:

select X.*
from #userinput X
where try_convert(datetime, x.dateString) is null;
0 голосов
/ 30 ноября 2018
CREATE TABLE #UserInput (
actualDate datetime NULL,
dateString varchar(50) NULL)

insert #UserInput(dateString) values('20181231 12:15')

SELECT CONVERT(datetime, dateString) 
FROM #UserInput 

UPDATE X 
SET X.actualDate = CONVERT(datetime, X.dateString) 
FROM #UserInput X 

select * from #UserInput

Я протестировал его для двух форматов ггггммдд чч: мм и мм / дд / гггг чч: мм, этот код работает правильно.Я не получил ошибку для обновления или выбрал запуск.

...