我有一个batch_requests表,其中有一个start_date和end_date列,数据类型为日期。
Create table BATCH_rEQUESTS
(Request NUMBER NOT NULL,
DETAILS VARCHAR2(1000),
START_DATE DATE,
END_DATE DATE)
当我向它添加 case 语句时,下面的查询会抛出无效数字错误 -
select request, details,start,to_char(end_date,'DD/MM/YYY'),case when end_date is null then 'N' else 'Y' end as status from batch_Requests;
我无法确定这里出了什么问题。
一般来说,没有什么问题:
示例表格和数据:
SQL> CREATE TABLE batch_requests
2 (
3 request NUMBER NOT NULL,
4 details VARCHAR2 (1000),
5 start_date DATE,
6 end_date DATE
7 );
Table created.
SQL> INSERT INTO batch_requests
2 VALUES (1,
3 'Littlefoot',
4 DATE '2024-01-08',
5 DATE '2024-08-25');
1 row created.
您的询问:
SQL> SELECT request,
2 details,
3 start_date,
4 TO_CHAR (end_date, 'DD/MM/YYY'),
5 CASE WHEN end_date IS NULL THEN 'N' ELSE 'Y' END AS status
6 FROM batch_requests;
REQUEST DETAILS START_DA TO_CHAR(E S
---------- -------------------- -------- --------- -
1 Littlefoot 08.01.24 25/08/024 Y
SQL>
因此,我猜测还有其他原因导致了该错误。请发布我发布的内容 - 示例数据,以便我们了解您正在使用的内容。
出现此问题的原因是 Oracle SQL 尝试将 CASE 语句的 end_date 比较转换为数字,从而导致“无效数字”错误。
试试这个
SELECT
request,
details,
start_date,
TO_CHAR(end_date, 'DD/MM/YYYY') AS end_date,
CASE
WHEN end_date IS NULL THEN 'N'
ELSE 'Y'
END AS status
来自 批量请求;