这段代码将尝试转换输入。dd.mm.yyyy
它首先使用convert format 104 将字符串更改为德国时间格式。它用于begin try
抑制转换过程中的任何错误。
如果成功,日期在@output_dt
. 如果失败,@output_dt
将会null
。
declare @input_str varchar(25)
declare @output_dt date
set @input_str = '31122011'
if len(@input_str) >= 8
begin
declare @german_str varchar(25)
select @german_str = substring(@input_str, 1, 2) + '.' +
substring(@input_str, 3, 2) + '.' +
substring(@input_str, 5, 4)
begin try
select @output_dt = convert(date, @german_str, 104)
end try
begin catch
end catch
end
select @output_dt
如果您不能使用begin catch
,您可以创建一个包含有效日期的表格。此示例创建一个名称ValidDates
为 1900 到 2100 的表:
if object_id('ValidDates') is not null
drop table ValidDates
create table ValidDates (date_str varchar(8), dt date)
go
truncate table ValidDates
declare @start_dt date
declare @end_dt date
set @start_dt = '1900-01-01'
set @end_dt = '2100-01-01'
; with cte as
(
select @start_dt as dt
union all
select dateadd(day, 1, dt)
from cte
where dt < @end_dt
)
insert ValidDates
(date_str, dt)
select replace(convert(varchar(10), dt, 104),'.','')
, dt
from cte
option (maxrecursion 0);
然后,您可以检查有效日期,例如:
select @output_dt = dt from ValidDates where date_str = @input_dt