2015-03-04 2 views
0

В настоящее время у меня есть даты, хранящиеся в общем поле атрибута в базе данных в виде строки.SQL - преобразование строки в Date и сравнение - Ошибка преобразования при преобразовании даты и времени из символьной строки

Все они хранятся в формате DD/MM/YYYY, например 01/01/2000

Я могу преобразовать их в их datetime успешно, используя следующие в моем select заявлении. Например, CONVERT(DATETIME, attribute.field_value, 103), где attribute.field_value содержит дату.

Заявление SELECT прекрасно работает и возвращает всю таблицу с ними правильно.

Я также могу вернуть столбец с датой сегодняшней в том же формате, как следует CAST(getdate() AS datetime)

Проблема возникает, когда я пытаюсь сравнить, теперь я только хочу, чтобы вернуть все, что новее, чем сегодня в псевдо код, который dateNewerThanToday > dateToday

Поэтому я попытался WHERE CONVERT(DATETIME, attribute.field_value, 103) > CAST(getdate() AS datetime)

это дает мне ошибку

Conversion failed when converting datetime from character string.

Я попробовал множество трансляций, чтобы заставить его работать. Я также обернул выбор, поэтому я делаю это только на наборе данных с правильными данными.

Любая помощь будет очень полезна! Спасибо заранее!!

+1

Есть ли вероятность того, что одна из строк столбца 'attribute.field_value' содержит значение, отличное от конвертируемого. Попробуйте стрелять 'Выберите CONVERT (DATETIME, атрибут.field_value, 103) from attribute' и посмотреть, работает ли это. –

+0

Определенно звучит как одна из ваших дат находится не в правильном формате. –

+0

OP утверждает, что 'CONVERT' работает в' SELECT'. – NickyvV

ответ

0

Пара вещей ..

  1. Вам не нужно преобразовать в GETDATE() в DATETIME data type, как это уже возвращает DATETIME тип данных.

  2. Вместо CONVERT(DATETIME, attribute.field_value, 103)

    использование

    CONVERT(DATETIME, attribute.field_value) или CAST(attribute.field_value AS DATETIME)

  3. Добавить ИНЕК в вашем выборе, чтобы получить только действительные DATETIME значения. что-то вроде

    WHERE ISDATE(attribute.field_value) = 1

    Это будет отфильтровывать любые значения, которые, как представляется, сервер значение даты, но SQL оленья кожа видеть их как действительные значения даты.

Важно не

Используйте типы соответствующих данных. Если в этом столбце хранятся значения дат, почему бы не использовать типы данныхили DATETIME.

Смежные вопросы

 Смежные вопросы