SQL concat和转义字符

时间:2012-03-09 21:53:18

标签: sql oracle escaping

所以,我正在处理一个查询,它将获得申请人的first_name_txt,last_name_txt或business business_name。

我在尝试连接逗号时遇到问题。

 case
 when (credit_req_contr_requestor.requestor_type_id=0)
 then CONCAT(CONCAT(credit_req_contr_requestor.last_name_txt,'','') , 
 credit_req_contr_requestor.first_name_txt )
when(requestor_business.requestor_type_id=3)
 then    requestor_business.business_name_txt end as applicant_name_txt

我给出两个单引号的原因是因为这个查询是由java sql loader运行的,当它遇到单引号时会中断。

但是,当我运行此查询时,它会出现错误,指出“无效的争论数”。因此,我添加了三个单引号''',''',但申请人名称_txt将显示为Smith',' John

我尝试使用||而不是concat,它也是同样的问题。

我如何得到这个?如何在显示时在这两个字段之间添加逗号?我可以使用的任何其他转义字符?

2 个答案:

答案 0 :(得分:1)

怎么样 CONCAT(credit_req_contr_requestor.last_name_txt,CHR(44))

答案 1 :(得分:1)

如果你需要完全避免使用单引号(如果使用包含字符串文字的SQL语句,实用程序会破坏似乎很奇怪)你可以做这样的事情

SQL> ed
Wrote file afiedt.buf

  1  with x as (
  2    select 0 type_id, 'John' first_name, 'Smith' last_name, null business_name
  3      from dual
  4    union all
  5    select 3, null, null, 'ACME Bolts'
  6      from dual
  7  )
  8  select (case when type_id = 0
  9               then last_name || chr(44) || chr(32) || first_name
 10               else business_name
 11           end)
 12*   from x
SQL> /

(CASEWHENTY
-----------
Smith, John
ACME Bolts