我在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识别月份而不是日期。你能帮帮忙吗?如果你有任何问题请告诉我。
发布于 2016-05-27 23:17:33
将date保存为date,而不是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))DATEFROMPARTS是从SQL Server 2012开始提供的。
https://stackoverflow.com/questions/37486803
复制相似问题