Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中获取当前年份的第一个月和第一天_Sql_Sql Server_Datetime - Fatal编程技术网

在SQL中获取当前年份的第一个月和第一天

在SQL中获取当前年份的第一个月和第一天,sql,sql-server,datetime,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年的任何

我有一个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年的任何帮助?

这里有一个解决方案来获得您想要的结果:

DECLARE @test       DATETIME

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

SELECT @test
设置值时,会自动转换为
DATETIME


希望这会对您有所帮助。

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

隐式转换“-”为int返回0

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

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

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

您只需稍微修改您的剪报:

declare @data datetime , @test datetime

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

这将适用于您

竖起大拇指。。!!这是一种很好的处理方法,而不是将
01-01
连接到日期