Как преобразовать SQL строковую дату в пригодную для использования дату ISO8601? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть запрос, который мне нужно проверить, если одна дата меньше или равна другой. Дата хранится в таблице в виде строки в этом формате 2/1/2020. * Версия сервера SQL на моем тестовом сервере - 13.0, и нижеприведенный запрос работает нормально, но как промежуточная, так и производственная версии - 11.0.7. Ниже приведен запрос, который я пробовал до сих пор, но получаю ошибку

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

Как правильно написать этот запрос, чтобы он работал на всех SQL серверах?

SELECT TrackingNumber
FROM CarrierTrackingData
WHERE (SUBSTRING(Status, 1, 9) = 'Delivered') AND (CONVERT(date, CAST(DeliveryDate AS date), 23) <= CONVERT(date, CAST(InStoreDate AS date), 23))
GROUP BY TrackingNumber```

1 Ответ

0 голосов
/ 02 марта 2020

Вам нужно 101 век mm/dd/yyyy, чтобы преобразовать в формат даты:

WHERE ( SUBSTRING(Status, 1, 9) = 'Delivered' AND 
        CONVERT(date, DeliveryDate , 101) <= CONVERT(date, InStoreDate , 101)
      );

Примечание: вам не нужно использовать CAST(), так как CONVERT() с веком сделает для вас разговор ,

РЕДАКТИРОВАТЬ: Вы можете проверить возможный формат даты, используя TRY_CONVERT():

SELECT DeliveryDate, 
       TRY_CONVERT(DATE, DeliveryDate, 101) AS Possible_DeliveryDate, 
       InStoreDate,
       TRY_CONVERT(DATE, InStoreDate , 101) AS  Possible_InStoreDate
FROM table t;

TRY_CONVERT() вернет NULL, когда разговор не удается.

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