Проверьте строку DateTime в SQL Server 2005 - PullRequest
0 голосов
/ 18 мая 2009

Мне требуется сценарий SQL для проверки поля VARCHAR в таблице в базе данных SQL Server 2005, содержащей значения DateTime в формате DD/MM/YYYY или NULL. Я хотел бы определить все недействительные даты. Кто-нибудь может предложить метод?

UPDATE

  • Ответ должен использовать T-SQL; по соображениям производительности я не могу использовать SQLCLR.

Спасибо, MagicAndi

Ответы [ 6 ]

8 голосов
/ 18 мая 2009

Используйте "ISDATE ()" ИЛИ "IS NULL": но сначала установите язык для распознавания порядка день-месяц-год

SET LANGUAGE british
SELECT ISDATE('12/31/2009'), ISDATE('31/12/2009')

SET LANGUAGE us_english
SELECT ISDATE('12/31/2009'), ISDATE('31/12/2009')

Редактировать: Как уже упоминалось @edosoft, вы также можете использовать SET DATEFORMAT. SET LANGUAGE неявно устанавливает переопределения DATEFORMAT, SET DATEFORMAT SET LANGUAGE

5 голосов
/ 18 мая 2009

Вы должны указать формат даты при использовании ISDATE (). Из книг онлайн:

SET LANGUAGE us_english;
SET DATEFORMAT dmy;
SELECT ISDATE('15/04/2008'); --Returns 1.
3 голосов
/ 18 мая 2009

Вы можете использовать функцию ISDATE()

2 голосов
/ 18 мая 2009

вы можете использовать встроенную функцию T-SQL IsDate (). и измените столбец на datetime, а не varchar. Вы не можете сортировать или делать какие-либо вычисления даты в столбце varchar.

0 голосов
/ 18 мая 2009

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

Создайте таблицу с именем ALMANAC с одной строкой для каждой действительной даты. Вы можете заполнить его десятью годами действительных дат только 3653 строками, более или менее. Даже если вы пройдете сто лет, это всего лишь 36 525 рядов, не слишком больших по сегодняшним меркам.

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

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

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

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

0 голосов
/ 18 мая 2009

Обработка даты в SQL невелика, мы написали функцию DotNet для выполнения преобразований DateTime в трудном случае.

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