Как проверить даты в формате ГГГГММДД - PullRequest
0 голосов
/ 03 марта 2020

У меня есть столбец с тысячами строк в формате ГГГГММДД. Я должен подтвердить, что все строки в правильном формате даты. Если есть какая-либо строка из желаемого формата или любым способом (скажем, ноль), строка должна быть возвращена в результате. У меня есть следующие примеры данных:

  Date           value
 20180101         1
 20180102         2
 20180203         3
 Nan              4
 20180809         5
 08092029         7
 2018-05-06       8

Поскольку NAN и 2018-05-06 не в нужном формате даты, я хочу вернуть эти строки. Мне известно, что ISDATE () доступно на SQL сервере, но оно дает истинное значение, когда дата в любом формате.

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Это немного сложно. Но я думаю, что это то, что вы хотите:

(case when date like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' and
           try_cast(date, date) is not null
      then 'Valid'
      else 'Yuck!'
 end)

SQL Сервер обрабатывает строку из 8 цифр как дату в формате как ГГГГММДД как дату, независимо от других настроек. Поэтому вышеприведенное должно делать именно то, что вы хотите.

1 голос
/ 04 марта 2020

Я не уверен, что try_cast доступен в SQL Server 2012, вы можете использовать ISDATE и функцию len для этого:

;with tableA as
(select '20180101' as date1 union
select 'Nan' as date1 union
select '08092029' as date1 union
select '2018-05-06' as date1)

select x.*,
      case when ISDATE(date1)=1 and len(date1)=8 then 'Y'
      else 'N' end as Valid_Flag
 from tableA x

Надеюсь, это поможет.

...