首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何截断时间戳,以便对Oracle中的日期进行调整?

如何截断时间戳,以便对Oracle中的日期进行调整?
EN

Stack Overflow用户
提问于 2021-11-05 18:19:09
回答 2查看 228关注 0票数 0

我在Oracle的SELECT中有以下查询:

代码语言:javascript
运行
复制
CASE
            WHEN to_char(ola.promise_date, 'D') = 2 THEN (ola.promise_date - 4)
            WHEN to_char(ola.promise_date, 'D') = 3 THEN (ola.promise_date - 4)
            WHEN to_char(ola.promise_date, 'D') > 3 AND to_char(ola.promise_date, 'D') < 7 THEN (ola.promise_date - 2)
            WHEN to_char(ola.promise_date, 'D') = 7 THEN (ola.promise_date - 2)
            WHEN to_char(ola.promise_date, 'D') = 1 THEN (ola.promise_date - 2)
END mod_Promise_date

"ola.promise_date“是一列类型为时间戳的列,我使用CASE语句来调整日期,考虑到最初承诺日期的一周的日期(除其他外,出于内部考虑),因此,例如,一些承诺日期为2021-11-07 : 00:00:00.0000000的产品将有一个修改后的承诺日期: 2021-11-05 00: 00:00:00.0000000 (考虑星期日为第七天)。

现在,我用一个用C#制作的程序运行这个查询,我有一个日期选择器来选择特定的承诺日期,这样用户就可以选择星期日,2021年11月7日,它将像前面提到的那样运行这个查询,除了承诺日期之外,比如2021-11-07 23:59:00.0000000,因为查询将把日期看作是11月8日而不是7日,这不是预期的行为,因为在这个特定的项目实例中,并不真正需要小时、分钟、秒和分数秒。

在这种情况下,是否存在忽略时间、分钟、秒和小数秒的方法--时间语句?或将日期降至与指定日期相同的日期,而不考虑时间。

我使用Oracle非常新,如果我不够清楚或者查询看起来不可行的话,很抱歉。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-05 19:11:14

可以使用TRUNC(datetime_value)截断DATETIMESTAMP数据类型,并将时间组件设置为午夜:

代码语言:javascript
运行
复制
CASE TRUNC(ola.promise_date) - TRUNC(ola.promise_date, 'IW')
WHEN 0 /* Monday    */ THEN TRUNC(ola.promise_date) - 2
WHEN 1 /* Tuesday   */ THEN TRUNC(ola.promise_date) - 4
WHEN 2 /* Wednesday */ THEN TRUNC(ola.promise_date) - 4
WHEN 6 /* Sunday    */ THEN TRUNC(ola.promise_date) - 2
                       ELSE TRUNC(ola.promise_date) - 2
END mod_Promise_date

注:TO_CHAR(datevalue, 'D')将根据您在世界上的位置给出不同的值,因为不同的地区会考虑在每周不同的日子开始一周。如果您想要一种与地域无关的方法来确定每周的天数,那么您可以使用TRUNC(datetime_value) - TRUNC(datetime_value, 'IW')找到从国际标准化周开始的不同之处。

票数 2
EN

Stack Overflow用户

发布于 2021-11-05 18:31:19

如果我正确地理解了您,您只需截断该值并“删除”时间组件(即将其重置为午夜)。

例如:

(只是设置格式;您不必这样做)

代码语言:javascript
运行
复制
SQL> alter session set nls_timestamp_format = 'dd.mm.yyyy hh24:mi:ss.ff6';

Session altered.

查询,该查询显示结果:

代码语言:javascript
运行
复制
SQL> select systimestamp,
  2         trunc(systimestamp) result
  3  from dual;

SYSTIMESTAMP                        RESULT
----------------------------------- -------------------
05.11.21 19:29:41,207000 +01:00     05.11.2021 00:00:00

SQL>

你会有

代码语言:javascript
运行
复制
... THEN (trunc(ola.promise_date) - 4)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69857659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档