【问题标题】:Changing date to day before for certain daily time ranges in SQL在 SQL 中将某些每日时间范围的日期更改为前一天
【发布时间】:2026-01-08 04:00:01
【问题描述】:

我们有一个带有日期时间字段的表,需要让它与其他具有在系统日期而非日历日期上工作的日期字段的表正常工作。

我们的系统日一直运行到凌晨 1:59,因此在所有这些表格中,午夜之后的任何内容都被视为前一天(实际上并不显示日期时间,只显示日期)。

我试图弄清楚如何创建一个日期字段,其中“2019-01-01 01:45:00.111”将读取为“2018-12-31”,但“2019-01-01 2:00” :00.111' 将读作 '2019-01-01'。

任何想法都将不胜感激。

【问题讨论】:

  • 我建议使用另一个名为“POSTED_DATE”之类的字段来说明这一点——然后除了正确的日期之外还存储修改后的日期。

标签: sql sql-server


【解决方案1】:

通过从每个日期时间值中删除 120 分钟,然后将日期时间值转换为日期,试试下面这个简单的逻辑。

SELECT CAST(DATEADD(MINUTE,-120,<your_date_time_column>) AS DATE)
FROM <Your_Table> 

【讨论】:

  • 我会减去两个小时,但这是等价的。
【解决方案2】:

您可以使用CASE WHEN.. 子句将日期递增或递减 1,如下例所示

   SELECT CASE WHEN TO_CHAR(DATE, 
   'HH:MM') BETWEEN '00:00' AND 
    '01:45' THEN DATE-1 ELSE 
     DATE END FROM TABLE 

【讨论】:

  • 这不是有效的 SQL Server 语法,因此赞成票相当令人困惑。