spring 数据 oracle - 发现非数字字符

spring data oracle - non-numeric character was found

我有 table disponibility 与此列。

我创建了以下查询

@Query(nativeQuery = true, value = "select count(*) from disponibility d WHERE d.fk_room = ?1 "
        + "AND ((d.starthour < ?2 AND ?2 < d.endhour) OR (d.starthour < ?3 AND ?3 < d.endhour)) "
        + "AND ((d.startdate < TO_DATE(?4, 'dd/MM/yyyy') AND TO_DATE(?4, 'dd/MM/yyyy') < d.enddate) OR (d.startdate < TO_DATE(?5, 'dd/MM/yyyy') AND TO_DATE(?5, 'dd/MM/yyyy') < d.enddate))")
int checkUnicityRoom(String roomId, int startHour, int endHour, Date startDate, Date endDate);

return这个错误

ORA-01858: a non-numeric character was found where a numeric was expected

您输入的 日期 值实际上不是日期。看演示:

这没问题:

SQL> select to_date('15/02/2021', 'dd/mm/yyyy') today from dual;

TODAY
----------------
15.02.2021 00:00

但这不是(注意 ab 在月份的位置):

SQL> select to_date('15/ab/2021', 'dd/mm/yyyy') today from dual;
select to_date('15/ab/2021', 'dd/mm/yyyy') today from dual
               *
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected


SQL>

我不知道您使用了哪些值,但是 - 检查您传递给 TO_DATE 函数的内容。


正如您所说,您使用的值是 Wed Apr 11 01:00:00 CET 2018,它显然不同于您与 TO_DATE 函数一起使用的 dd/MM/yyyy 格式掩码。这两个必须匹配.

你的情况:

SQL> select to_timestamp_tz('Wed Apr 11 01:00:00 CET 2018', 'Dy Mon dd hh24:mi:ss TZR yyyy') datum
  2  from dual;

DATUM
---------------------------------------------------------------------------
11.04.18 01:00:00,000000000 CET

SQL>

因为 table 列的数据类型是 DATE 你应该

SQL> select cast(to_timestamp_tz('Wed Apr 11 01:00:00 CET 2018', 'Dy Mon dd hh24:mi:ss TZR yyyy') as date) datum
  2  from dual;

DATUM
----------------
11.04.2018 01:00

SQL>