SQL Server:如何将float yyyymmdd转换为日期yyyy-mm-dd?

时间:2016-07-25 06:56:12

标签: sql sql-server-2008

在其他帖子中,您建议使用

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                           

2 个答案:

答案 0 :(得分:5)

假设原始数据类型实际上是浮点数,可以使用多个铸件来完成:

DECLARE @Date float = 19710508

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

结果(日期数据类型):

1971-05-08

内部强制删除小数点后的所有数字, 中间转换将int值转换为char值,因为不允许从int到date的显式转换,并且外部转换将char值转换为date。

答案 1 :(得分:2)

你可以试试这个:

DECLARE @input FLOAT = 20160725

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

我们需要CAST到INT,因为我们想要删除小数点后的零数字,类似于value = 20160725.000000.