将varchar转换为日期在SQL Server中无法正常工作

时间:2016-05-27 15:06:56

标签: sql-server date

我在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-2017dateadd(m,1,'01-10-2017')收到2017-02-10 00:00:00.0.

我只需要欺骗SQL Server来识别月份而不是日期。你能帮忙吗?如果您有任何问题,请与我们联系。

1 个答案:

答案 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可用。