我有一个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年的任何帮助?
答案 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
这对你有用