Найти недопустимые даты в SQL Server 2008 - PullRequest
8 голосов
/ 17 июня 2010

У меня есть таблица 300.000 строк;один из столбцов - это varchar (), но он действительно содержит дату xx / xx / xxxx или x / x / xxxx или аналогичную.Но выполнение следующего теста приводит к ошибке:

SELECT CAST(MyDate as Datetime) FROM MyTable

Проблема в том, что она не сообщает мне, в какой строке ...

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

Например, я выполнил простой тест, который исправил около 40 строк:

UPDATE MyTable SET MyDate = REPLACE(MyDate, '/000','/200') FROM MyTable WHERE MyDate like ('%/000%’)
UPDATE MyTable SET MyDate = REPLACE(MyDate, '/190','/199') FROM MyTable WHERE MyDate like ('%/190%’)

Это исправило довольно много странных строк, у которых были даты, такие как 01/01/0003 и так далее.(Даты варьируются с 1998 по 2010 год).

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

Как лучше всего распечатать их, чтобы я мог их удалить, отредактировать или посмотреть, что делать?Спасибо.

Ответы [ 4 ]

22 голосов
/ 17 июня 2010
SELECT
    *
FROM
   MyTable
WHERE
    ISDATE(MyDate) = 0
4 голосов
/ 17 июня 2010

Вы пробовали функцию ISDATE?

1 голос
/ 05 ноября 2016

ISDATE, кажется, не работает всегда.

следующее возвращает 1 в SQL Server 2008 R2 Select ISDATE('04- December 20')

Но попытка привести к тому же значению на сегодняшний день не удастся. Select cast('04- December 20' as date)

Ошибка преобразования при преобразовании даты и / или времени из символьной строки.

1 голос
/ 05 февраля 2014

Осторожнее с IsDate.У меня 1 плохая запись в таблице тысяч.Это говорит 8201-11-30 является действительной датой.У IsDate должно быть ограничение ГОД.

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