【问题标题】:Escape single quotes from comma separated string in Oracle从 Oracle 中的逗号分隔字符串中转义单引号
【发布时间】:2019-09-08 14:47:19
【问题描述】:

我正在尝试从 Oracle SQL Developer 中的逗号分隔字符串中转义单引号,下面是我的 Select 查询:

SELECT (CASE WHEN PS.SUPPLIER_NO IS NULL THEN 'FALSE' ELSE 'TRUE' END) AS "Check"
      ,dm."branch_id", dm."SUPPLIER_NO", dm."supplier_name", dm."date_created"
      ,dm."vendor_no", dm."ORDERING_ADDRESS_1", dm."ORDERING_ADDRESS_2"
      ,dm."ORDERING_CITY", dm."ORDERING_STATE_COD", dm."ORDERING_ZIP"
      ,dm."country_code", dm."fax_area_code", dm."fax_no", dm."fax_extension"
FROM datamart.udm_supplier_dim@teradata.wesco.com dm
LEFT JOIN PROJECT_SUPPLIERS PS ON PS.SUPPLIER_NO = dm."SUPPLIER_NO"
 AND PS.BRANCH_ID = dm."branch_id"
 AND PS.PROJECT_ID = 'e82a654af6c64e8297576b88b5eff138'
WHERE dm."branch_id" IN (REPLACE('6218, 5577','''',''''''));

我试图替换/转义 Where IN 子句中的单引号,但它给出了无效数字的错误。

ORA-01722: 无效号码

当我尝试从其他选择语句中使用替换来选择相同的字符串时,它正在工作。

select REPLACE('6218, 5577','''','''''') from dual;

上述查询按预期工作,并提供 o/p 为 '6218, 5577'

谁能告诉我,为什么它在我的主要 Select 语句中不起作用?

【问题讨论】:

  • 在您的字符串中没有单引号。你查询返回一个字符串6218, 5577而不是一个ID列表。你应该解析你的字符串
  • 它是一个字符串,我们从应用程序传递给参数到 oracle sql 开发程序,为了理解我在选择查询i.e. '6218, 5577' 中写了示例字符串。
  • 能否更改您的应用程序以传递数字集合,而不是单个字符串值——它可能是从列表中生成的?

标签: sql oracle split


【解决方案1】:

'6218, 5577' 这是一个字符串,而不是一个值列表。因此,如果您执行select REPLACE('6218, 5577','''','''''') from dual;,您将尝试替换字符串中的单个引号。因为它在你的字符串中不存在,所以什么都不会被替换。

您选择的结果仍然是相同的字符串,而不是您期望的列表。

您应该将逗号分隔的字符串分成几行。

这是一种方法

with tab as (
  SELECT trim(regexp_substr('6218, 5577', '[^,]+', 1, LEVEL)) str
   FROM dual
   CONNECT BY instr('6218, 5577', ',', 1, LEVEL - 1) > 0
) 

你可以在你的选择上使用它

with tab as (
  SELECT trim(regexp_substr('6218, 5577', '[^,]+', 1, LEVEL)) str
   FROM dual
   CONNECT BY instr('6218, 5577', ',', 1, LEVEL - 1) > 0
) 
select ...
  from ...
  WHERE dm."branch_id" IN (select str from tab ); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2018-09-24
    相关资源
    最近更新 更多