用于组合日期的 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 日、小时/等。从第二的主要内容,如果未能解决你的问题,请参考以下文章