請求書のテーブルから取得するやや複雑な SQL クエリがあります。クエリ対象のテーブルは、3 つの数値フィールドを使用して日付を作成します (日、月、および年用に 1 つ)。
このクエリは、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)
しかし、selectのこのステートメントは問題なく評価されます
to_date(
concat(invoice_year,
concat('-',
concat(invoice_month,
concat('-',invoice_day)))),'YYYY-MM-DD') as invoice_date