Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle中逗号分隔字符串的单引号转义_Sql_Oracle_Split - Fatal编程技术网

Sql Oracle中逗号分隔字符串的单引号转义

Sql Oracle中逗号分隔字符串的单引号转义,sql,oracle,split,Sql,Oracle,Split,我试图在Oracle SQL Developer中从逗号分隔的字符串中转义单引号,下面是我的Selectquery: 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."ORD

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

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:无效号码

当我试图使用replace from other select语句选择相同的字符串时,它正在工作

select REPLACE('6218, 5577','''','''''') from dual;
上述查询按预期工作,并将o/p显示为
'62185577'


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

'62185577'
这是一个字符串,不是一个值列表。因此,如果您执行
操作,请从dual中选择REPLACE('62185577','','')您正在尝试替换字符串中的单引号。因为它不存在于字符串中,所以不会替换任何内容

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

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

这里有一种方法可以做到这一点

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 ); 

'62185577'
这是一个字符串,不是值列表。因此,如果您执行
操作,请从dual中选择REPLACE('62185577','','')您正在尝试替换字符串中的单引号。因为它不存在于字符串中,所以不会替换任何内容

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

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

这里有一种方法可以做到这一点

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 ); 

字符串中没有单引号。查询返回一个字符串
62185577
,而不是id列表。您应该解析字符串它是一个字符串,我们正在将它从应用程序传递到oracle sql developer过程的参数,为了理解,我在这里的select query
中编写了示例字符串,即“62185577”
。您的应用程序是否可以更改为传递一组数字,而不是一个单一的字符串值-它可能是从一个列表中生成的-在您的字符串中没有单引号。查询返回一个字符串
62185577
,而不是id列表。您应该解析字符串它是一个字符串,我们正在将它从应用程序传递到oracle sql developer过程的参数,为了理解,我在这里的select query
中编写了示例字符串,即“62185577”
。您的应用程序是否可以更改为传递一组数字,而不是一个单一的字符串值-它大概是从列表中生成的?