2012-11-13 98 views
0

使用SQL-server 2008數據庫我有一個char(14)數據類型,我想將其轉換爲日期時間。sql-server:將Char(14)轉換爲Datetime?

例炭(14)的值:

20120209102026 
20010131120000 

日期格式爲某種yyyymmdd

似乎我發佈的值不是唯一的格式,因爲我得到一些「值超出範圍」的錯誤。爲此,我可以跳過那些不是有效日期的那些。

+1

其實它看起來像'yyyyMMddhhmmss'。你使用的是什麼版本的SQL Server?你可以使用SQL CLR嗎? – Oded

+0

我正在使用sql 2008.我認爲數據庫最初是在某種兼容模式下的sql server 2000。 – chobo2

+3

這是非常相似的http://stackoverflow.com/questions/6601663/how-do-i-create-a-datetime-from-a-custom-format-string –

回答

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) 

版本二,忽略了數值範圍:

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) 
+0

嗯,你知道什麼。我認爲他們有不同的格式存儲在這張表中,因爲我的索引超出了範圍。 – chobo2

+1

怎麼樣通過例如WHERE NOT ISDATE(constructAbove) – bummi

1

這是醜陋的,但如果你的格式爲yyyymmddhhmmss那麼你可以使用:

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

SQL Fiddle with Demo

+0

你需要/ s嗎? – Beth

+1

@Beth我不確定你在問什麼? – Taryn

+0

認爲它需要是yyyy/mm/dd,但很明顯,演員陣容沒有/ s – Beth

0

一系列函數調用,但結果相同。

嘗試這樣的:

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

在這裏尋找如何STUFF的作品!