【发布时间】:2018-05-16 20:13:35
【问题描述】:
DATEADD("Day", -1,(DT_DBDATE)DATEDIFF("Day", (DT_DBDATE) 0, GETDATE()))
所以我还在习惯 SQL/SSIS。我想获取前几天的 DATE TIME,所以应该是 2018 年 5 月 15 日晚上 11:59。我能够研究并找到一个在上午 12 点获取前一个日期的表达式
【问题讨论】:
标签: sql sql-server ssis
DATEADD("Day", -1,(DT_DBDATE)DATEDIFF("Day", (DT_DBDATE) 0, GETDATE()))
所以我还在习惯 SQL/SSIS。我想获取前几天的 DATE TIME,所以应该是 2018 年 5 月 15 日晚上 11:59。我能够研究并找到一个在上午 12 点获取前一个日期的表达式
【问题讨论】:
标签: sql sql-server ssis
如果您尝试在 SSIS 表达式中执行此操作,您会看到类似
DATEADD("minute", -1, (DT_DATE)((DT_DBDATE) GETDATE()))
从右到左阅读..
GETDATE() 被评估并提供截至现在的日期和时间。闪烁,它会得到更新。
(DT_DBDATE) 是一个只支持日期,不支持时间组件的数据类型。
但是,我们需要时间来恢复 DT_DATE 的数据类型,因为它支持时间,所以(DT_DATE)((DT_DBDATE) GETDATE()) 是在 SSIS 中将日期重置为午夜的巧妙方法。
然后我们使用 DATEADD 函数从上面减去 1 分钟。
留给普通读者的另一种方法是对时间组件使用字符串操作。将白天重置为午夜,然后将所需时间作为字符串连接到末尾,然后将其转换回 DT_DATE。
【讨论】:
这也可以(使用今天的日期来演示):
select cast(cast(getdate() as date) as datetime)-(1/cast(1440 as float))
【讨论】:
这可能满足您的需求。
SELECT DATEADD(MINUTE, -1, DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())))
【讨论】: