在SQL Server中,我没有找到如何将int数据类型转换为日期数据类型

时间:2016-09-11 12:30:17

标签: sql-server

我有一个INT数据类型列的表,我的数据是这样的

valid_to_day(int)
------------
20150301
20150101

如果我对上述数据执行-1,我想获得此列的上一个日期 数据是这样的

valid_to_day
------------
20150300
20150100

预期数据

valid_to_day
------------
20150228
20141231

请任何人帮忙

提前致谢

萨蒂什南比亚

3 个答案:

答案 0 :(得分:4)

你不应该存储这样的日期。

Date数据类型更紧凑,确保您没有无效日期,并且可以与日期函数一起使用。

希望你需要这个,这样你就可以修复你的架构。

一种不依赖于强制转换为字符串的方法是

SELECT DATEFROMPARTS(valid_to_day/10000, valid_to_day%10000/100, valid_to_day%100)

当然,现在它是正确的数据类型,您可以使用DATEADD来获取前一天。

SELECT DATEADD(DAY,
                -1, 
                DATEFROMPARTS(valid_to_day/10000, valid_to_day%10000/100, valid_to_day%100)
               ) 

答案 1 :(得分:0)

您可以使用dateadd函数以及转换类型112

declare @d int = 20150301

select  convert(int, convert(varchar(10), dateadd(d,-1,convert (date, convert(varchar(10),@d), 112)),112))

答案 2 :(得分:0)

首先将 INT 转换为 VARCHAR ,然后转换为 DATE

DECLARE @d INT = 20150101

SELECT CAST(CAST(@d AS VARCHAR(8)) AS DATE)
SELECT DATEADD(d,-1,CAST(CAST(@d AS VARCHAR(8)) AS DATE))
SELECT 
    REPLACE
    (
        CAST
        (
            DATEADD(d,-1,CAST
                        (
                            CAST(@d AS VARCHAR(8)) AS DATE)
                        ) 
            AS VARCHAR(10)
        )
        ,'-',''
    )