이 스 니펫은 입력을 변환하려고 시도합니다. 먼저 문자열을 과 함께 독일 시간 형식 dd.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
을 사용할 수없는 경우, 당신은 유효한 날짜와 테이블을 만들 수 있습니다.
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);
당신은 다음과 같은 유효한 날짜를 확인할 수 있습니다 :이 예는 1900에서 2100에 날짜와 ValidDates
라는 테이블을 생성
select @output_dt = dt from ValidDates where date_str = @input_dt
'yyyymmdd'는 설정에 독립적입니다. 왜 어쨌든 문자열로 주위에 날짜를 전달하고 있습니까? 애플리케이션이 DB에 도착하기 전에 애플리케이션의 정확성을 검증하고 적절한 데이터 유형으로 변환 할 수 없습니까? –
이미 데이터베이스에있는 핀란드 사회 보장 번호를 확인하려고합니다. 그리고 그 형식은 항상 ddmmyy입니다. – Jaska
그래서 문자열을'yyyy-mm-dd' 대신'yyyymmdd'로 변환하고'isdate'를 사용하면됩니다. –