我在SQL Server日期转换中遇到了一个特殊问题。我有这种格式的日期:YYMM
。我们称之为Date_To_Format
。
我写了这个函数把它转换成日期
convert(varchar, concat('01', '-', Date_To_Format % 100, '-',
case when Date_To_Format/100 between 60 and 99
then concat('19', cast(Date_To_Format / 100 as varchar))
else concat('20', cast(Date_To_Format/100 as varchar))
end), 5)
现在问题是我需要找到本月的最后日期。我试着做一个dateadd来添加一个月,然后从中减去一天。它总是在日期而不是月份上添加一个月。
例如:我得到01-10-2017
而dateadd(m,1,'01-10-2017')
收到2017-02-10 00:00:00.0.
我只需要欺骗SQL Server来识别月份而不是日期。你能帮忙吗?如果您有任何问题,请与我们联系。
答案 0 :(得分:1)
将日期保留为日期,而不是varchar。如果您使用的是SQL Server 2012或更高版本,请尝试以下操作:
DECLARE @Date_To_Format nvarchar(4) = '1605'
SELECT
BeginningOfMonth = DATEFROMPARTS(@Date_To_Format / 100 + IIF(@Date_To_Format / 100 BETWEEN 60 AND 99, 1900, 2000), @Date_To_Format % 100, 1),
EndOfMonth = DATEADD(DAY, -1, DATEFROMPARTS(@Date_To_Format / 100 + IIF(@Date_To_Format / 100 BETWEEN 60 AND 99, 1900, 2000), @Date_To_Format % 100 + 1, 1))
自SQL Server 2012以来, DATEFROMPARTS
可用。