如何在oracle中使用trunc date()函数。?

时间:2017-08-29 06:42:32

标签: oracle oracle11g

当我运行以下查询时,我收到了错误。有人帮我解决了这个问题。

 select trunc('27-oct-97','dd-mm-yy') form dual;

当我运行此查询时出现以下错误:

  

错误:内联数​​字函数。

2 个答案:

答案 0 :(得分:2)

TRUNC function有签名:

TRUNC( date_value, format )

您提供的是字符串值而不是日期值,'dd-mm-yy'invalid format(您只想使用'dd'作为格式截断到当天的开头,或者使用'mm'或使用'yy'开始年份的月份开始 - 但是将所有三个一起使用是没有意义的。)

您可以使用ANSI日期文字来指定日期:

SELECT TRUNC(
         DATE '1997-10-27',
         'DD'
       )
FROM   DUAL

或使用TO_DATE功能:

SELECT TRUNC(
         TO_DATE( '27-oct-97', 'DD-MON-RR' ),
         'DD'
       )
FROM   DUAL

(您也可以省略'DD'格式参数,因为默认情况下会截断到当天的开头。)

但是,在这两种情况下,截断都是多余的,因为日期的时间组件已经是午夜,所以不需要截断。

您想要的是具有非午夜时间组件的日期值:

SELECT TRUNC(
         TO_DATE( '1997-10-27 12:34:56', 'YYYY-MM-DD HH24:MI:SS' ),
         'DD'
       )
FROM   DUAL

或截断到月份或年份的开头:

SELECT TRUNC(
         DATE '1997-10-27',
         'MM'
       )
FROM   DUAL

答案 1 :(得分:0)

您有两种选择:

1)从截断日期中删除时间部分到最近的日期:

TRUNC(DATE)

2)使用format,指定要截断的值:

TRUNC(DATE,year)

截断(将转向1)格式之前的所有内容,在此示例中为年份。 所以这个:

trunc(to_date('27-oct-97','dd-mm-yy'),'YEAR') 

将输出:

01-jan-97
相关问题