Concat函数不起作用 - 参数数量无效

时间:2017-03-05 16:56:18

标签: sql oracle

我有一个包含两列(Name,Occupation)的表。我想以这样的格式输出值。

Jane(A) 
Jenny(D) 
Julia(A)

听到第一个是名字,括号中的值是他们职业的第一个字母。

到目前为止,我所做的是

SELECT CONCAT(Name,SUBSTR(Occupation,1,1)) FROM OCCUPATIONS;

这样的输出值

JaneS 
JennyS 
JuliaD

获取我尝试过的所需格式

SELECT CONCAT(Name,"(",SUBSTR(Occupation,1,1),")") FROM OCCUPATIONS;
然后它会抛出这样的错误。

  

SELECT CONCAT(姓名,'(',SUBSTR(职业,1,1),')')来自职业   *第1行的错误:ORA-00909:参数数量无效

我做错了什么,我应该怎么做才能解决它。

4 个答案:

答案 0 :(得分:7)

SELECT CONCAT(Name,"(",SUBSTR(Occupation,1,1),")") FROM OCCUPATIONS;

首先,双引号"用于包含标识符。使用单引号'来包装字符串。

其次,CONCAT接受两个参数。

您可以嵌套一堆连接,但使用连接操作||更简单,更清晰:

SELECT Name || '('  || SUBSTR(Occupation,1,1) || ')' FROM OCCUPATIONS;

答案 1 :(得分:1)

这恰好是我更喜欢replace()而不是concat()的一个原因:

SELECT REPLACE(REPLACE('{Name} ({Occ})', '{Name}', Name'
                      ), '{Occ}', SUBSTR(Occupation, 1, 1)
              )

您可以轻松查看正在创建的字符串的格式并轻松更改它。此外,REPLACE()将参数转换为适当的类型(无论如何,Oracle都使用字符串连接)。

答案 2 :(得分:0)

您只能使用||串联

select c1  ||   c2 ||   c3 || c4   as  col from mytable

答案 3 :(得分:0)

您可以尝试

select CONCAT(CONCAT(FIRST_NAME,' '),LAST_NAME) from employees;

使用此方法,必须提供等于参数数量的嵌套CONCAT函数数量

结果

CONCAT(CONCAT(FIRST_NAME,''),LAST_NAME)
  • Neena kochhar
  • 史蒂芬·金
  • 亚历山大·洪诺德