获取当前年度第一个月和第一天的SQL

时间:2014-09-04 13:07:20

标签: sql sql-server datetime

我有一个SP,我希望得到当年以及今年的第一天和第一个月。

例如,今年:2014-01-01; 对于2015 : 2015-01-01;

我试过

@data datetime , @test datetime

SELECT @test = GETDATE()
set @test = CAST( YEAR(@test)+'-'+'01'+'-'+'01' as char(100))
set @data = CAST( @test as datetime)

但是它返回2016年而不是2014年的任何帮助?

3 个答案:

答案 0 :(得分:5)

您的问题是您将日期和月份添加到数值。 year()返回一个整数。

隐式转换' - '作为int返回0.

因此,您的表达式将导致2014 + 0 + 1 + 0 + 1,因为当您有一个整数并尝试添加(var)字符时,sqlserver将尝试将其他所有内容转换为整数。

将日期操纵到一年的第一天的最佳方法可能是:

SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)

答案 1 :(得分:0)

以下是获得所需结果的解决方案:

DECLARE @test       DATETIME

SET @test = CAST(DATEPART(YEAR, GETDATE()) AS VARCHAR(4)) + '-01-01'

SELECT @test

设置值时会自动转换为DATETIME

希望这会对你有所帮助。

答案 2 :(得分:0)

你可以稍微修改你的剪辑:

declare @data datetime , @test datetime

SELECT @test = GETDATE()
set @test = convert(nvarchar(4),YEAR(@test)) +'-'+'01'+'-'+'01'
set @data = @test

这对你有用