このコード スニペットは、入力の変換を試みます。最初に、変換形式 104dd.mm.yyyy
を使用して、文字列をドイツの時刻形式に変更します。変換中のエラーを抑制するために使用します。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