Как проверить, является ли (var) char действительной датой ISO (112) - PullRequest
0 голосов
/ 11 июля 2011

У меня есть поле char (8), которое should действительно содержит значение в формате даты в ггггммдд.Учитывая (гипотетическую) таблицу id(int)|datestring(char(8)), я хотел бы иметь возможность сделать что-то вроде

SELECT id, isValidDate(datestring) FROM my_hypothetical_table

. Для меня важно, чтобы это можно было выполнить так же, как запрос (чтобы я мог, например,SELECT * from othertable INNER JOIN hypothetical_table on hypothetical_table.id = othertable.hypothetical_FK WHERE isValidDate(hypothetical_table.datestring) = 1).Поймать ошибки не представляется жизнеспособным.

Обратите внимание, что функция IsDate () работает только с датами, разделенными косой чертой, а не с форматами ггггммдд.

Ответы [ 2 ]

5 голосов
/ 11 июля 2011

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

DECLARE @MyTable TABLE (id INT, datestring CHAR(8))
INSERT INTO @MyTable VALUES (1, '20110711')
INSERT INTO @MyTable VALUES (2, '2011')
INSERT INTO @MyTable VALUES (3, '20110228')
INSERT INTO @MyTable VALUES (4, '20110229')
INSERT INTO @MyTable VALUES (5, '2011071')
INSERT INTO @MyTable VALUES (6, '201107')
SELECT id, datestring, ISDATE(datestring) AS IsDate FROM @MyTable

Запуск этого приводит к выводу:

id          datestring IsDate
----------- ---------- -----------
1           20110711   1
2           2011       1
3           20110228   1
4           20110229   0
5           2011071    0
6           201107     1
5 голосов
/ 11 июля 2011

ISDATE () также будет работать с форматом ГГГГММДД

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