我正在进入Oracle数据库。我遇到了TRUNC(DATE, [FMT])
函数。我不太清楚它,除了它似乎返回某种起始值?
有人可以教育我吗?它在工作中何时或用于什么,或者为什么有人可能想要使用该功能?
尝试此查询以了解何时可能有用:
ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd hh24:mi:ss';
select sysdate,
trunc( sysdate, 'mi' ) As beginning_of_current_minute,
trunc( sysdate, 'mi' ) As beginning_of_current_hour,
trunc( sysdate, 'dd' ) As beginning_of_current_day,
trunc( sysdate, 'iw' ) As beginning_of_current_week,
trunc( sysdate, 'mm' ) As beginning_of_current_month,
trunc( sysdate, 'q' ) As beginning_of_current_Quarter,
trunc( sysdate, 'y' ) As beginning_of_current_Year
FROM dual;
举个例子 - 您希望从本周初开始获取所有订单:
SELECT *
FROM ORDERS
WHERE order_date >= trunc( sysdate, 'iw' )
一个真实的例子是,如果您想按年份聚合表中的结果。 你可以像这样使用 TRUNC 函数:
SELECT TRUNC(my_date, 'YEAR') the_year, count(*)
FROM some_table
GROUP BY TRUNC(my_date, 'YEAR');
。这将返回一组结果,第一列是截断到年初的日期,第二列是该年内日期的所有记录的计数。
the_year, count(*)
_________________
01-JAN-12, 543
01-JAN-13, 1268
01-JAN-14, 1134
01-JAN-15, 1765
显然还有其他方法可以实现相同的目标,但这是一个如何使用TRUNC的真实示例。
另一种可能是,如果您正在比较日期并且只想使用一定程度的精度。 如果您有一个时间戳列,并且想要今天的所有记录,则可以根据时间戳大于昨天午夜且小于今天午夜的范围进行选择,也可以选择截断为 DATE 的时间戳等于今天的位置。
https://docs.oracle.com/cd/E29805_01/server.230/es_eql/src/cdfp_analytics_lang_trunc.html
它有用的另一件事是获取当天的时间部分。我一直使用这样的表达式:
SELECT sysdate - trunc(sysdate) AS TodaysTime FROM DUAL
因为系统日期以十进制格式存储(例如sysdate = 42651.2426897456
(并且整数值对应于午夜,我可以使用上面的语句只获取小数部分(例如TodaysTime = 0.2426897456
,或早上 6 点之前(。
可能有更简单的方法可以做到这一点,但在我的应用程序中,这是最简单的,因为我经常只需要使用当天的时间组件。