Преобразование datetime в varchar не работает при прохождении через переменные - PullRequest
0 голосов
/ 01 июня 2019

Я столкнулся с этой странной проблемой, когда мне нужно преобразовать datetime в varchar.

Я выполнил эти 2 запроса:

declare @d datetime 
set @d ='31/12/2019 16:12:25.317'

select @d

select convert(varchar(50), '31/12/2019 16:12:25.317', 101)

Первый запрос выдает ошибку:

Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона.

Второй запрос работает нормально.

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Если я думаю правильно, вы ищете 103 формата даты / времени (британский / французский), который является DD / MM / YYYY.В этом случае вы можете попробовать это ниже -

DECLARE @d DATETIME
SET @d =CONVERT(DATETIME, '31/12/2019 16:12:25.317',103)

SELECT @d

SELECT CONVERT(DATETIME, '31/12/2019 16:12:25.317', 103)
1 голос
/ 01 июня 2019

Ошибка происходит на первом этапе, потому что @d объявляется как datetime, а не как строка (если ваши настройки интернационализации не позволяют это). Я думаю, что вы намерены:

declare @d varchar(255) 
set @d = '31/12/2019 16:12:25.317';

select convert(date, @d, 103)

Как правило, при установке констант даты и времени следует использовать:

declare @d datetime;
set @d = '2019-12-31T16:12:25.317';

Это независимый от местоположения метод определения даты / времени в SQL Server. Предостережение: хотя это правильный метод, я обычно опускаю T для совместимости с другими базами данных (и он все еще работает всегда или почти всегда).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...