SQL Server DateTime, приведенный из VarChar - PullRequest
1 голос
/ 14 мая 2011

У меня есть таблица с 9 миллионами записей.Каждый из них имеет поле "BirthDate", которое хранится как varchar.Я пытаюсь выбрать всех, где дата рождения 25 лет или меньше (все люди 25 или младше).Это терпит неудачу, потому что где-то в этой чудовищности таблицы есть недопустимое значение.

select COUNT(*) from LeadSplit where CAST(LeadSplit.Birthdate as datetime) > DATEADD(yy, -26, getdate())  and Birthdate is not null 

Ошибка:

Msg 242, Level 16, State 3, Line 1
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

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

Ответы [ 3 ]

3 голосов
/ 14 мая 2011

Вы можете попробовать , чтобы найти поврежденные строки, выполнив что-то вроде:

SELECT (some ID), Birthdate
FROM dbo.YourTable
WHERE ISDATE(Birthdate) = 0

Это может работать не во всех случаях, но может дать вам отправную точку.

2 голосов
/ 14 мая 2011

Ошибка, которую вы получаете, состоит в том, что одна или несколько дат не могут быть проанализированы с помощью параметра DateFormat.

Set DateFormat MDY
GO
Select Count(*)
From LeadSplit
Where Case
        When IsDate(BirthDate) = 0 Then 0
        When BirthDate >= DateAdd(yyyy,-25,CURRENT_TIMESTAMP) Then 1
        End = 1
1 голос
/ 14 мая 2011

Попробуйте использовать CONVERT вместо CAST и явно указать формат даты. MSDN Статья о CAST и CONVERT

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