用于组合日期的 SQL 表达式,例如年/月/日来自 1 日、小时/等。从第二

Posted

技术标签:

【中文标题】用于组合日期的 SQL 表达式,例如年/月/日来自 1 日、小时/等。从第二【英文标题】:SQL expression for combining dates such that year/month/date comes from 1st, hours/etc. from 2nd 【发布时间】:2014-11-03 11:36:28 【问题描述】:

我想更新一个 DATETIME 类型的列,使其从参数@date(在 Microsoft SQL Server 2012 的存储过程中)获取年、月和日期,但保留小时、分钟、秒等。从它的现值。

是否有简洁的 SQL 表达式以这种方式组合日期(类似于 java.util.Calendar 允许的方式)或 UPDATE 的特殊语法来实现此效果?

更新这里是一个具体的例子:UPDATE of 2014 年 11 月 1 日下午 3:30 到 @date 2014 年 11 月 3 日下午 12:40 结果为 2014 年 11 月 3 日 3:30 PM(即只有月、日、受影响的日期、小时/分钟/秒等保持不变)。

【问题讨论】:

您可以编辑您的问题并提供您正在尝试做什么的示例吗? @GordonLinoff 谢谢你的评论。做到了。 SQL Server 2010 不存在。您使用的是哪个 SQL Server 版本? @SveinFidjestøl SQL Server 2012(错字)。 【参考方案1】:

从@date 参数中获取日期部分,从列中的现有值中获取时间部分。

UPDATE mytable
SET mydatetimecolumn =
    CAST(CONVERT(date, @date) as datetime) + CONVERT(time, mydatetimecolumn)
WHERE <my_where_clause>

【讨论】:

【参考方案2】:

我可能建议只添加完整的天数:

select dateadd(day,
               datediff(day, col, @date),
               col)

如果你想在update 中使用这个:

update table t
     set col = dateadd(day, datediff(day, col, @date), col);

【讨论】:

【参考方案3】:

试试这个

    declare @date varchar(50)
    declare @time varchar(50)
    declare @date_time varchar(50) 
    set @time= (select right(convert(varchar(50),@date),8)) 
    set @date=(select left(convert(varchar(50),getdate()),12))

    set @date_time=(select concat(@date,@time))
    UPDATE tbl
    set col1=@date_time

     where...

【讨论】:

不是全部!!-它只会给你几小时/分钟/秒 它将显示小时/分钟/秒并消除其余部分。 我知道为什么这也应该有效,但与其他答案相比,它似乎有点容易出错。

以上是关于用于组合日期的 SQL 表达式,例如年/月/日来自 1 日、小时/等。从第二的主要内容,如果未能解决你的问题,请参考以下文章

组合命名记录列表并跟踪 SQL 中的日期字段

标准化 SQL 表中的列

根据日期检查来自同一表的记录,其中包含多行中的不匹配值

在 SQL Server 中使用日期时间

SQL 按键重复开始和结束日期

SQL 中的价格年化