当我运行以下查询时,我收到了错误。有人帮我解决了这个问题。
select trunc('27-oct-97','dd-mm-yy') form dual;
当我运行此查询时出现以下错误:
错误:内联数字函数。
答案 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