Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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_Sql Server_Tsql - Fatal编程技术网

SQL Server,交换时间戳中的日期

SQL Server,交换时间戳中的日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个DB表,有两列datetime类型,如下所示 eventTime timeStamp Sequence 1970-01-13 17:14:50.000 2020-03-22 18:28:15.443 5575268 我需要做的是从时间戳中的年份更新eventTime中的年份,但保持eventTime中的时间不变,这样我就可以 eventTime timeStamp Seque

我有一个DB表,有两列datetime类型,如下所示

eventTime               timeStamp               Sequence
1970-01-13 17:14:50.000 2020-03-22 18:28:15.443 5575268
我需要做的是从时间戳中的年份更新eventTime中的年份,但保持eventTime中的时间不变,这样我就可以

eventTime               timeStamp               Sequence
2020-03-22 17:14:50.000 2020-03-22 18:28:15.443 5575268
最好的方法是什么(我有大约60万行需要这样做…)


谢谢。

一个选项是将
时间戳
事件时间
之间的年差添加到后者:

UPDATE yourTable
SET eventTime = DATEADD(year, DATEDIFF(year, timeStamp, eventTime), eventTime);

SQL Server允许添加
datetime
值。因此:

update t
    set eventTime = convert(datetime, convert(date, timestamp)) + convert(datetime, convert(time, eventTime))
    where eventTime < convert(date, timestamp);
更新t
set eventTime=convert(datetime,convert(date,timestamp))+convert(datetime,convert(time,eventTime))
其中eventTime
他是一把小提琴

您还可以添加天数:

update t2
    set eventtime = dateadd(day, datediff(day, eventtime, timestamp), eventtime)
    where eventtime < convert(date, timestamp);
更新t2
set eventtime=dateadd(day,datediff(day,eventtime,timestamp),eventtime)
其中eventtime
您还可以添加
WHERE DATEPART(YEAR,timeStamp)DATEPART(YEAR,eventTime)