如何验证日期格式为 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
希望对您有所帮助。
我有一个包含数千行的日期列,格式为 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
希望对您有所帮助。