2012-03-09 57 views
1

因此,我正在处理一个查询,该查询将获得申请人的first_name_txt,last_name_txt或business business_name。SQL concat和转义字符

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

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加载运行,当它遇到一个单引号打破。

但是,当我运行这个查询时,它给出了一个错误说“无效的争论数量”。所以,我添加了三个单引号''',''',但是然后applicant_name_txt将显示为Smith',' John

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

我该如何解决这个问题?如何在显示时在这两个字段之间添加逗号?我可以使用任何其他转义字符?

+1

我希望你不抱怨'了mystring =“选择...‘喇嘛’...”'不工作 - 因为在这种情况下,你应该转义[Java字符串字符](http://docs.oracle.com/javase/tutorial/java/data/characters.html),而不是SQL - 即''... \'bla \'...“或''''bla'...''' – Aprillion 2012-03-09 22:32:39

回答

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 
+0

这个查询是由java sql加载器解析的,它在遇到单引号时会将字符串缩短,因此我尝试使用转义字符。 – roymustang86 2012-03-09 22:02:01

+0

@ roymustang86 - 更新了我的答案。 – 2012-03-09 22:06:57

1

如何 CONCAT(credit_req_contr_requestor.last_name_txt,CHR(44))