Oracle SQL Date 列放入 Case 语句时会抛出错误

问题描述 投票:0回答:2

我有一个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 oracle case
2个回答
0
投票

一般来说,没有什么问题:

示例表格和数据:

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>

因此,我猜测还有其他原因导致了该错误。请发布我发布的内容 - 示例数据,以便我们了解您正在使用的内容。


0
投票

出现此问题的原因是 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 

来自 批量请求;

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.