0

SQL-server 2008データベースではchar(14)、日時に変換したいデータ型があります。

char(14)値の例:

20120209102026
20010131120000

日付形式はyyyymmddある種のものです。

一部の値で「インデックスが範囲外です」というエラーが発生するため、投稿した値だけがフォーマットではないようです。このため、有効な日付ではないものをスキップできます。

4

3 に答える 3

1
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)
于 2012-11-13T18:14:18.730 に答える
1

これは醜いですが、フォーマットが次のyyyymmddhhmmss場合は次を使用できます。

select cast(left(yourDate, 8)+' '+
    SUBSTRING(yourDate, 9, 2)+':'+SUBSTRING(yourDate, 11, 2)+':'+RIGHT(yourDate, 2) as datetime)
from yourtable

デモで SQL Fiddle を参照してください

于 2012-11-13T18:15:18.897 に答える
0

一連の関数呼び出しですが、結果は同じです。

このようにしてみてください:

select convert(datetime,STUFF(STUFF(STUFF(STUFF(STUFF('20010131120000',5,0,'/'),8,0,'/'),11,0,' '),14,0,':'),17,0,':'))

STUFFの仕組みはこちら!

于 2012-11-13T18:43:33.410 に答える