В моей таблице базы данных есть столбец varchar
, в строке, которую я хотел бы вернуть, он заполняется как '2018-12-26T00:00:00.000
' (мои кавычки не включены в фактическое значение). Когда я пытаюсь запросить это значение, когда оно является действительной датой, например
SELECT
myValue
FROM
myTable
WHERE
ISDATE(myValue) = 1
возвращается правильно. Однако мне нужно, чтобы это значение было преобразовано в DATE
. Когда я пытаюсь что-то вроде этого:
SELECT
CAST(myValue AS DATE) AS myValueFormatted
FROM
myTable
WHERE
ISDATE(myValue) = 1
Я получаю ошибку
Ошибка преобразования при преобразовании даты и / или времени из строки символов
Есть ли другой способ, которым я могу преобразовать это varchar
значение в Date
?
ОБНОВЛЕНИЕ: я заметил, что, попробовав несколько разных вещей, мне кажется, что запрос подходит для меня, используя значение в качестве даты для чего-либо (DATEDIFF
, CONVERT
обратно в строку и т. Д.) В части выбора , но попытка что-либо сделать с этим в предложении WHERE
вызывает ошибку. Чтобы ничто иное не мешало, я создал временную таблицу, содержащую только 1 строку со значением данных выше, и выполнение запроса только по этому одному значению выдает ошибку
ОБНОВЛЕНИЕ 2: Хорошо, я понятия не имею, почему это исправляет это, но это - то, что я нашел. Когда я бегу
SELECT
myValue
FROM
myTable
WHERE
TRY_CONVERT(DATE, myValue) IS NOT NULL
возвращает ТОЧНО те же значения, что и
SELECT
myValue
FROM
myTable
WHERE
ISDATE(myValue) = 1
Однако, когда я затем добавляю AND CAST(myValue AS DATE) < GETDATE()
к каждому предложению WHERE
, работает только первый. Я понимаю, почему TRY_CONVERT безопаснее в использовании, я до сих пор не уверен, почему он работает над GETDATE ()