如何验证日期格式为 YYYYMMDD

How to validate dates are in the format of YYYYMMDD

我有一个包含数千行的日期列,格式为 YYYYMMDD。我必须验证所有行的日期格式是否正确。如果有任何行偏离所需格式或以任何方式(比如空),该行应在结果中 returned。我有以下示例数据:

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

由于 NAN 和 2018-05-06 不是所需的日期格式,我想要这些行中的 return。我知道 ISDATE() 在 SQL 服务器中可用,但它在日期为任何格式时给出真实值。

这有点棘手。但我认为这可以满足您的需求:

(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 位数字的字符串视为格式为 YYYYMMDD 的日期,而不管其他设置。所以上面应该做你想要的。

我不确定 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

希望对您有所帮助。