通过返回截断的值,TRUNC 函数可降低它的第一个数值的、DATE 或 DATETIME 参数的精度。如果第一个参数既不是数值也不是时间点,则必须将它强制转型为数值、DATE 或 DATETIME 数据类型。
通过返回截断的值,TRUNC 函数可降低它的第一个数值的、DATE 或 DATETIME 参数的精度。如果第一个参数既不是数值也不是时间点,则必须将它强制转型为数值、DATE 或 DATETIME 数据类型。
图: 负的、零和正的截断因子的示例
SELECT order_num , TRUNC(total_price) FROM items WHERE TRUNC(total_price) = 124.00;
SELECT TRUNC(125.46), TRUNC(total_price) FROM items;
格式字符串 | 对返回的值的影响 |
---|---|
'YEAR' | 截断到年初。month、day、hour 和 minute 值截断到 01-01 00:00。 |
'MONTH' | 截断到该月的第一天之初。hour 和 minute 值截断到 00:00。 |
'DD' | 阶段到同一天之初(00:00 = 午夜)。 |
'DAY' | 如果第一个参数是星期天,则返回那天的午夜(00:00)。对于该星期的任何其他天,返回前一个星期天的午夜。 |
'HH' | 截断到该小时之初。minute 值截断为零。 |
'MI' | 截断到最近的分钟之初。对于所有这些格式字符串,丢弃小于 minute 的时间单位。 |
如果您在初始的 DATETIME 表达式参数之后省略格式字符串规范,则返回的值是将第一个参数截断到天的值,就如同您指定了 'DD' 作为格式字符串一样。
下列示例在 SELECT 语句中以返回 DATETIME YEAR TO FRACTION(5) 值的列表达式调用 TRUNC 函数。在这些示例中,表 mytab 仅有单个行,且在那行中 mytab.col_dt 的值是 2006-12-07 14:30:12.12300。
SELECT TRUNC(col_dt, 'YEAR') FROM mytab;返回的值为 2006-01-01 00:00。
SELECT TRUNC(col_dt, 'YEAR')::DATE FROM mytab;返回的值为 01/01/2006。
SELECT TRUNC(col_dt, 'MONTH') FROM mytab;返回的值为 2006-12-01 00:00。
SELECT TRUNC(col_dt, 'HH') FROM mytab;返回的值为 2006-12-07 14:00。
要返回格式化的 DATE 值,您必须使用下列引用的字符串之一作为 TRUNC 函数的第二个参数:
格式字符串 | 对返回的值的影响 |
---|---|
'YEAR' | 截断到该年之初。month 和 day 值都为 01。 |
'MONTH' | 截断到该月之初。day 值为 01。 |
'DD' | 返回第一个 date_expression 参数的 DATE 值。 |
'DAY' | 如果第一个参数是星期天,则返回那天。对于该星期的任何其他天,返回前一星期天的日期。 |
当第一个元素为 DATE 数据类型时,如果您未指定格式字符串作为第二个参数,则没有格式字符串作为缺省值生效。不发出错误,但将第一个参数作为求值为整数的数值表达式处理,而不是作为 DATE 值。 GBase 8s 将 DATE 值作为自从 1899 年 12 月 31 日以来的整数天数在内部存储。
例如,查询 SELECT ROUND(TODAY) FROM systables 未为 DATE 表达式提供格式字符串,如果在 2008 年 4 月 1 日提交该查询,则返回整数 39538。
SELECT TRUNC(TODAY, -2) FROM systables;对于类似于 39500 这样的整数日期不适用的应用,请使用 'YEAR'、'MONTH'、'DAY' 或 'DD' 格式字符串作为 TRUNC 函数的第二个参数,来防止将 DATE 表达式作为数值表达式来处理。在 2008 年 4 月 1 日,如果 MDY4/ 是 DBDATE 环境变量的设置,下列查询返回 DATE 值 04/01/2008:
SELECT TRUNC(TODAY, 'DD') FROM systables;
sprintf(query2, "%s", "select trunc( ?::date, 'DAY') from mytab"); EXEC SQL prepare selectq from :query2; EXEC SQL declare select_cursor cursor for selectq; EXEC SQL open select_cursor using :hostvar_date_input; EXEC SQL fetch select_cursor into :var_date_output;
要了解 GBase 8s 环境变量之中的优先顺序,这些环境变量可为内建的按时间排序的数据类型指定显示和数据条目格式,请参阅主题 DATE 和 DATETIME 格式规范的优先顺序.
请注意,TRUNC 函数名称是基于英文单词 "truncate",这与在 SQL 的 TRUNCATE 语句中它的含义不同。TRUNC 以另一个更小精度或相同精度的值替代它的第一个参数的值。TRUNCATE 语句从数据库表删除所有行,而不删除表模式。