我有一个INT
数据类型列的表,我的数据是这样的
valid_to_day(int)
------------
20150301
20150101
如果我对上述数据执行-1,我想获得此列的上一个日期 数据是这样的
valid_to_day
------------
20150300
20150100
预期数据
valid_to_day
------------
20150228
20141231
请任何人帮忙
提前致谢
萨蒂什南比亚
答案 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)
)
,'-',''
)