问题描述
我试图从下面的查询中得到 yyyy 如果我尝试使用它会抛出错误
查询
WITH last_startdate
AS (SELECT owner,package_name,Max(start_date) MAX_START_DATE,to_date(max(start_date),'YYYY') as max_start_date_yr
FROM (SELECT DISTINCT owner,object_name AS PACKAGE_NAME
FROM dba_procedures
) P
JOIN SCHEMA.table_name A /*AUDITING TABLE*/
ON P.package_name = A.task_name
GROUP BY P.owner,P.package_name)
SELECT *
FROM last_startdate
ORDER BY 3 DESC
错误
ORA-01830: date format picture ends before converting entire input string
01830. 00000 - "date format picture ends before converting entire input string"
*Cause:
*Action:
预期结果
OWNER PACKAGE_NAME MAX_START_DATE MAX_START_DATE_YR
STAGE PA_AB_CDS 19.02.2021 2021
EDW PA_BX_BCS 09.12.2020 2020
MART PA_WQ_AFD 12.08.2019 2019
CODE PA_WQ_IOD 23.05.2016 2016
对于获得预期结果的任何建议?
解决方法
start_date
是一个 DATE
我想。所以 max(start_date)
也是一个日期。
那你为什么要在上面应用 to_date
?将日期转换为日期?这是没有意义的。你我想要to_char
而不是
to_char(max(start_date),'YYYY') as max_start_date_yr
这会给你一个字符串中的年份。或者只是使用 EXTRACT
来获取数字年份:
extract(year from max(start_date)) as max_start_date_yr