2009-09-02 3 views
0

У меня есть таблица с 5 миллионами записей дат, хранящихся в виде char (10) с форматом yyyy/mm/dd. Мне нужно преобразовать эти значения в дату, так что я использую:SQL Update varchar to date error

UPDATE [Database].[dbo].[Table] 
    SET [DoB]=convert(datetime,[DoBText],103) 
GO 

Но я получаю ошибку:

«Преобразование типа VARCHAR данных в тип данных даты и времени привело к вне диапазона стоимость."

Теперь я попытался исправить данные, чтобы этого не произошло - т.е. нет «yyyy» ниже 1900 или выше 2000, нет «dd» выше 30 (28 для февраля), нет «мм» выше 12 или ниже 0. Нет NULL.

По-прежнему преобразование не выполняется.

Можно ли каким-либо образом позволить SQL пропустить преобразование при ошибке и просто продолжить?

E.g. что-то вроде:

SET [DoB]= try to do [DoB]=convert(datetime,[DoBText],103) if fails SET [DoB] = NULL 

Благодаря Карл

+0

В течение нескольких месяцев есть 31 дней - Надеюсь, вы не нарушили данные: S –

+0

Также нет месяца в месяце - месяц должен быть 1-12 включительно. –

ответ

1

Попробуйте следующее:

SET DATEFORMAT YMD; 

UPDATE [Database].[dbo].[Table] 
SET [DoB]=[DoBText] 
WHERE ISDATE([DoBText]) = 1 

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

0

вставить дату в формате или использовать параметры YYyyMmDd и вы не будете иметь эту проблему. или выполнить одно из стиля следующие

SET DATEFORMAT DMY 
SET DATEFORMAT MDY 
SET DATEFORMAT YMD 
SET DATEFORMAT YDM 
1

Конверсия 103 обрабатывает дату в формате дд/мм/гггг. Используйте стиль преобразования 111 вместо этого, чтобы обрабатывать формат yyyy/mm/dd.

+0

Спасибо, что указали это! – Karl