gpt4 book ai didi

oracle - 如何在 sql-loader 中使用 to_number 和 nullif?

转载 作者:行者123 更新时间:2023-12-05 01:24:30 31 4
gpt4 key购买 nike

我在这里遇到过类似的日期问题(to_date 和 nullif 的组合):How to use decode in sql-loader?

很好地解决了。

我的问题是我的 CSV 文件中的数字字段可以具有以下格式:999,999,999.99 或只是一个点“.”对于空值。

这是工作:

MINQUANTITY      "TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')"

MINQUANTITY      NULLIF MINQUANTITY      = '.'

但是当我尝试将两者结合时,它不起作用:

MINQUANTITY      "TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')  NULLIF :MINQUANTITY= '.'"

这是错误日志:

Record 1: Rejected - Error on table MY_TABLE, column MINQUANTITY.
ORA-00917: missing comma

如何组合这些?

最佳答案

您的 NULLIF 条件不应该在 SQL 字符串的双引号内;它需要排在第一位。来自 the documentation :

  • The SQL string appears after any other specifications for a given column.

  • The SQL string must be enclosed in double quotation marks.

...

  • The SQL string is evaluated after any NULLIF or DEFAULTIF clauses, but before a date mask.

所以应该是:

MINQUANTITY NULLIF MINQUANTITY = '.'
"TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')"

(为了便于阅读,您可以分成两行,这两部分仍然适用于 `MINQUANTITY 字段)。

在日志中报告为:

MINQUANTITY                          NEXT     *   ,       CHARACTER
NULL if MINQUANTITY = 0X2e(character '.')
SQL string for column : "TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')"

(您的 NLS 字符是否正确?这是将 , 视为小数点分隔符,而您的问题表明您正在使用 .。两者都会当然,只要值用双引号括起来就可以工作。

关于oracle - 如何在 sql-loader 中使用 to_number 和 nullif?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18143888/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com