SQL 服务器:如何验证 yyyymmddhhmmss
SQL Server : How to validate for yyyymmddhhmmss
为避免任何转换错误,我们想验证目标字符串是否可以使用 isdate 公式转换为日期时间,如下所示。
CASE WHEN isdate(@targetstring)= 1 then cast(@targetstring as datetime) else '1900-01-01 00:00:00' end
它按预期工作,它 returns 1 当它可以转换时。
select isdate('2021-06-22 23:27:00')
select isdate('20210622')
select isdate('20210622 23:00:00')
但 yyyymmddhhmmss 无法按预期工作,它 returns 0,即使字符串可以转换为日期时间。
select isdate('20210622230000')
如果我们使用它,它似乎可以工作。
select isdate(left('20210622230000', 8) + ' ' + substring('20210622230000', 9,2) + ':' + substring('20210622230000', 11,2) + ':' + substring('20210622230000', 13,2))
如果有更好的想法,请告诉我。谢谢。
只是说您可以 trim 使用 STUFF()
进行字符串操作
例子
Declare @S varchar(50)='20210622232715'
Select try_convert(datetime,stuff(stuff(stuff(@S,13,0,':'),11,0,':'),9,0,' '))
结果
2021-06-22 23:27:15.000
为避免任何转换错误,我们想验证目标字符串是否可以使用 isdate 公式转换为日期时间,如下所示。
CASE WHEN isdate(@targetstring)= 1 then cast(@targetstring as datetime) else '1900-01-01 00:00:00' end
它按预期工作,它 returns 1 当它可以转换时。
select isdate('2021-06-22 23:27:00')
select isdate('20210622')
select isdate('20210622 23:00:00')
但 yyyymmddhhmmss 无法按预期工作,它 returns 0,即使字符串可以转换为日期时间。
select isdate('20210622230000')
如果我们使用它,它似乎可以工作。
select isdate(left('20210622230000', 8) + ' ' + substring('20210622230000', 9,2) + ':' + substring('20210622230000', 11,2) + ':' + substring('20210622230000', 13,2))
如果有更好的想法,请告诉我。谢谢。
只是说您可以 trim 使用 STUFF()
例子
Declare @S varchar(50)='20210622232715'
Select try_convert(datetime,stuff(stuff(stuff(@S,13,0,':'),11,0,':'),9,0,' '))
结果
2021-06-22 23:27:15.000