2016-07-25 142 views
0

在其他職位,你的建議使用SQL Server:如何將浮動yyyymmdd轉換爲日期yyyy-mm-dd?

TO_DATE(your_date as String, 'YYYY-MM-DD') 

但在SQL Server中沒有的功能to_date :(

我想是這樣的:

select 
    start_date2 = replace(substring(cast(start_date as varchar),1,5),'.','') + '-' + 
     case when substring(cast(start_date as char),6,2) ='1e' then '10' else substring(cast(start_date as char),6,2) end + '-' + 
     cast(substring(cast(start_date as char),8,2)as char) 
from 
    my_table 

但它返回例如:

1971-05-e+        

而不是:

1971-05-08       
+0

https://msdn.microsoft.com/ en-AU/library/ms187928.aspx –

回答

4

假設原始數據類型實際上是浮動,這可以與多個鑄件進行:

DECLARE @Date float = 19710508 

SELECT CAST(
      CAST(
       CAST(@Date as int) 
      as char(8)) 
     as date) 

結果(日期數據類型):

1971-05-08 

內鑄造刪除所有小數點後面的數字, 中間的轉換將int值轉換爲char值,因爲不允許從int到date的明確轉換,並且外部轉換將char值轉換爲日期。

+0

OK,它的工作原理:) – faryzeusz

2

你可以試試這個:

DECLARE @input FLOAT = 20160725 

SELECT 
    CONVERT(DATE, CAST(CAST(@input AS INT) AS CHAR(8)), 112) 

我們需要強制轉換爲int,因爲我們希望小數點後去除零級的數字,像這樣value = 20160725.000000.

+0

行,它的工作原理:) – faryzeusz

+0

你確定你的數據總是yyyymmdd? –

+0

愛德華,有一個等於0.現在它工作,thx。 – faryzeusz

相關問題