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

far*_*usz 0 sql sql-server-2008

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

TO_DATE(your_date as String, 'YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)

但在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
Run Code Online (Sandbox Code Playgroud)

但它返回例如:

1971-05-e+                            
Run Code Online (Sandbox Code Playgroud)

代替:

1971-05-08                           
Run Code Online (Sandbox Code Playgroud)

Zoh*_*led 5

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

DECLARE @Date float = 19710508

SELECT  CAST(
            CAST(
                CAST(@Date as int) 
            as char(8)) 
        as date)
Run Code Online (Sandbox Code Playgroud)

结果(日期数据类型):

1971-05-08
Run Code Online (Sandbox Code Playgroud)

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