Sql Oracle中逗号分隔字符串的单引号转义
我试图在Oracle SQL Developer中从逗号分隔的字符串中转义单引号,下面是我的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
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”
。您的应用程序是否可以更改为传递一组数字,而不是一个单一的字符串值-它大概是从列表中生成的?