2011-07-24 10 views
1

私は列(nvarchar)を持っていますが、その中にdatetimesがありますが、stringとして扱います。その列の型をsmalldatetimeに変更したいのですが、しかし、私はそれを成功させることはできません。彼らの中には "2007-07-10"のようなものがありますが、それらのうちのいくつかはこの "02.07.2008"の逆です。どうすればそれらを1つの形式、例えばdd.mm.yyyyに変更できますか? (ms sql server 2008)文字列型をdatetime形式にフォーマットする

+2

これらの2つのフォーマットのみが使用されていますか、それとも複数のバリエーションがありますか? –

答えて

2

この2つのフォーマットしかない場合は、これを行う方法です。

私は

'02 .07.2008' を想定していますDD.MM.YYYY '

'2007-07-10 'YYYY-MM-DD' 形式を持っている'フォーマットがいる'

の場合あなたが「選択」節の「ケース」を変更する必要があり、それよりもより多くのフォーマットを持ってそれに応じて

declare @t table (a varchar(12)) 

insert @t values ('02.07.2008') 
insert @t values ('2007-07-10') 

select convert(date, a, case when charindex('-',a) = 5 then 21 else 103 end) 
from @t 

出力

2008-07-02 
2007-07-10 

フォーマットは日付フィールドの標準ですが、varcharとして保存する場合は、代わりにdd.mm.yyyyとしてフォーマットすることができます。

select replace(convert(varchar, convert(date, a, case when charindex('-',a) = 5 
then 21 else 103 end), 103), '/', '.') 
from @t 

私はあなたが常に最新ではなく、データベース可能な場合でvarchar型として日付を格納する必要があることを指摘しなければならない出力

02.07.2008 
10.07.2007 

2

正確な形式がわからない場合は、実行できません。

さまざまなフォーマットについて考える - 一部の国では月が最初、もう一方はその日です。だから、もし02/07.2008が7月2日を意味するのか、2月7日を意味するのか分からなければ、あなたの仕事を達成することはできません。

関連する問題