Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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 server 仅更改SQL中datetimeoffset的时间部分_Sql Server_Sql Server 2008_Tsql_Datetimeoffset - Fatal编程技术网

Sql server 仅更改SQL中datetimeoffset的时间部分

Sql server 仅更改SQL中datetimeoffset的时间部分,sql-server,sql-server-2008,tsql,datetimeoffset,Sql Server,Sql Server 2008,Tsql,Datetimeoffset,如何仅设置SQL datetimeoffset变量的时间部分 例如: DECLARE @date datetimeoffset = '2014-01-11 11:04:26 +02:00' 我想再计算两个DateTimeOffset: @startdate should be '2014-01-11 00:00:00 +02:00' @enddate should be '2014-01-12 00:00:00 +02:00' 但我尝试的所有解决方案都将偏移量设置为零 注意:我需要结果中的原

如何仅设置SQL datetimeoffset变量的时间部分

例如:

DECLARE @date datetimeoffset = '2014-01-11 11:04:26 +02:00'
我想再计算两个DateTimeOffset:

@startdate should be '2014-01-11 00:00:00 +02:00'
@enddate should be '2014-01-12 00:00:00 +02:00'
但我尝试的所有解决方案都将偏移量设置为零

注意:我需要结果中的原始偏移量,因为我需要将它们与表中的某些datetimeoffset列进行比较。所以,仅仅根据日期来选演员是行不通的

进一步注意:在SQL2012中这将非常容易;我可以使用DATETIMEOFFSETFROMPARTS。不幸的是,我目前无法升级到2012。例如:

SET @startdate = SELECT DATETIMEOFFSETFROMPARTS(datepart(yyyy, @date), datepart(mm, @date), datepart(dd, @date), 0, 0, 0, 0, datepart(tz, @date), 0, 7);

如果您想删除时间部分,请使用
cast(@startdate as date)
。您能否清楚地编写您尝试执行的代码以及您期望的确切结果?谢谢,这非常有效。你介意再解释一下吗?它似乎从输入日期的各个部分拼凑出一个字符串。CONVERT(VARCHAR(20),(CONVERT(DATETIME,CONVERT(DATE,@DATE)))上面的部分用于从输入中获取日期并将其转换为DATETIME,因此这里的显式转换使时间为00:00.002。这里我使用字符串函数(右函数)从输入中获取偏移值,因为DATE函数对时间偏移有一些限制
DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00'

SELECT @date InputDate,
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,@date)))) ) + ' ' + RIGHT(@date,6))) StartDate,
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,DATEADD(day,1,@date))))) ) + ' ' + RIGHT(@date,6))) EndDate
DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00'

SELECT TODATETIMEOFFSET(CAST(@date AS date),DATEPART(tz,@date))
SELECT TODATETIMEOFFSET(DATEADD(day,1,CAST(@date AS date)),DATEPART(tz,@date))