SQL Server: сбой преобразования при преобразовании времени из символьной строки - PullRequest
0 голосов
/ 01 января 2019

У меня есть столбец ниже, который имеет тип данных char(24), но данные содержат дату

Я хочу преобразовать данные в datetime, чтобы я мог выбрать данные за прошедший час следующим образом:

Where CounterDateTime   >= DateAdd(hour, -1, getDate())

Но я продолжаю получать сообщение об ошибке:

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

, даже если я преобразовалмои CounterDateTime до datetime.Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Не хранить значения даты / времени в виде строк.Это может вызвать проблему.

Следующая большая проблема - это неявное преобразование.Если вам нужно преобразовать значения, сделайте это явно.Итак:

Where try_convert(datetime, CounterDateTime) >= DateAdd(hour, -1, getDate())

У вас явно есть значения, которые невозможно преобразовать.Ты не знаешь почему.Вы можете найти эти значения с помощью запроса:

select CounterDateTime
from t
where try_convert(datetime, CounterDateTime) is null and
      CounterDateTime is not null;

Это вернет ненулевые значения, которые не могут быть преобразованы.

0 голосов
/ 01 января 2019

Вы можете привести столбец к дате и времени следующим образом:

Where CounterDateTime IS NOT NULL AND Cast(RTRIM(LTRIM(CounterDateTime)) as DateTime) >= DateAdd(hour, -1, getDate())

это также может работать:

Where CounterDateTime IS NOT NULL AND CONVERT(datetime, RTRIM(LTRIM(CounterDateTime)), 121) >= DateAdd(hour, -1, getDate())

и еще 1:

Where CounterDateTime IS NOT NULL AND try_parse(RTRIM(LTRIM(CounterDateTime)) as DateTime using 'en-US') >= DateAdd(hour, -1, getDate())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...