我有一个从发票表中提取的有点复杂的 SQL 查询。被查询的表使用三个数字字段来创建日期(一个代表日、月和年)。
此查询使用 TO_DATE 函数内部的 concat 函数调用组合。在查询的 SELECT 部分没有问题,但是当我在 WHERE 子句中使用相同的语句时,我得到一个“ORA-01858:在预期数字的地方发现了一个非数字字符”,它指的是第一个在 WHERE 子句中 TO_DATE 内使用 concat。
那么,在 where 子句中使用 concat 和 TO_DATE 有什么不同呢?
例如,WHERE 的以下部分会导致非数字字符错误
to_date(
concat(invoice_year,
concat('-',
concat(invoice_month,
concat('-',invoice_day)))),'YYYY-MM-DD')
> add_months(sysdate,-6)
但是选择中的这个语句评估得很好
to_date(
concat(invoice_year,
concat('-',
concat(invoice_month,
concat('-',invoice_day)))),'YYYY-MM-DD') as invoice_date