SQL-server 2008データベースではchar(14)
、日時に変換したいデータ型があります。
char(14)値の例:
20120209102026
20010131120000
日付形式はyyyymmdd
ある種のものです。
一部の値で「インデックスが範囲外です」というエラーが発生するため、投稿した値だけがフォーマットではないようです。このため、有効な日付ではないものをスキップできます。
SQL-server 2008データベースではchar(14)
、日時に変換したいデータ型があります。
char(14)値の例:
20120209102026
20010131120000
日付形式はyyyymmdd
ある種のものです。
一部の値で「インデックスが範囲外です」というエラーが発生するため、投稿した値だけがフォーマットではないようです。このため、有効な日付ではないものをスキップできます。
declare @c char(14)
select @c='20120209102026'
Select Cast(Substring(@c,1,8) + ' ' + Substring(@c,9,2)+':'+
Substring(@c,11,2)+':'+ Substring(@c,13,2) as DateTime)
範囲外の数値を無視する 2 番目のバージョン:
Select Cast(
Rtrim(Substring(@c,1,8)
+ Case When len(Substring(@c,9,4))>=4 then +' '+ Substring(@c,9,2) else '' end
+ Case When len(Substring(@c,11,2))=2 then +':'+ Substring(@c,11,2) else '' end
+ Case When len(Substring(@c,13,2))=2 then +':'+ Substring(@c,13,2) else '' end)
as Datetime)
これは醜いですが、フォーマットが次のyyyymmddhhmmss
場合は次を使用できます。
select cast(left(yourDate, 8)+' '+
SUBSTRING(yourDate, 9, 2)+':'+SUBSTRING(yourDate, 11, 2)+':'+RIGHT(yourDate, 2) as datetime)
from yourtable
デモで SQL Fiddle を参照してください
一連の関数呼び出しですが、結果は同じです。
このようにしてみてください:
select convert(datetime,STUFF(STUFF(STUFF(STUFF(STUFF('20010131120000',5,0,'/'),8,0,'/'),11,0,' '),14,0,':'),17,0,':'))
STUFFの仕組みはこちら!