仅更改sql记录的日期部分

时间:2019-03-28 07:16:56

标签: sql sql-server azure-sql-database

使用SQL(Azure Sql) 我有许多包含日期时间值的记录,例如: 19-3-16上午9:25 19/3/16上午10:15

我需要所有这些都是今天的日期,但保留其时间部分。

我是C#程序员,所以我的SQL有点生疏。

所以伪代码类似于(假设requested_delivery_date是我需要更新的字段。

更新设置request_delivery_date = request_delivery_date.dateadd(7天)

因此,此后任何具有19年3月20日上午9:30的日期现在将变为19年3月27日上午9:30

3 个答案:

答案 0 :(得分:1)

结合使用'queue' => true, DateAdd

DateDiff

结果:

DECLARE @Date As datetime = '2019-03-01T15:32:44'

SELECT  @Date As Source,
        GETDATE() As Today,
        DATEADD(DAY, DATEDIFF(DAY, @Date, GETDATE()), @Date) As Result

要更新表中的列,您只需要编写一条更新语句:

Source                  Today                   Result
2019-03-01 15:32:44     2019-03-28 08:27:29     2019-03-28 15:32:44

答案 1 :(得分:1)

它看起来像一个简单的UPDATE语句,它更新了YourTable的所有行。

UPDATE YourTable
SET requested_delivery_date = 
    DATEADD(DAY, DATEDIFF(DAY, requested_delivery_date, GETDATE()), requested_delivery_date)
;

如果您要添加固定天数,则查询甚至更简单:

UPDATE YourTable
SET requested_delivery_date = 
    DATEADD(DAY, 7, requested_delivery_date)
;

答案 2 :(得分:0)

我尝试成功了。这是我的桌子。

startTime   endTime
2019-03-28 15:55:10.690 2019-01-01 09:00:00.000

我的SQL语句:

UPDATE [MyDatabase].[dbo].[deom1] SET [endTime]=DATEADD(DAY, DATEDIFF(DAY, [endTime], GETDATE()), [endTime])

结果如下:

startTime   endTime
2019-03-28 15:55:10.690 2019-03-28 09:00:00.000

有关更多详细信息,请参见DATEADD (Transact-SQL)

希望这会有所帮助。