我有一个包含两列(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:参数数量无效
我做错了什么,我应该怎么做才能解决它。
答案 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)