oracle Concat 函数不起作用 - 参数数量无效
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42611194/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Concat function is not working - invalid number of arguments
提问by Gurwinder Singh
I have a table with two columns(Name, Occupation). I want to output the value in a format something like this.
我有一个包含两列(姓名、职业)的表格。我想以这样的格式输出值。
Jane(A)
Jenny(D)
Julia(A)
Hear First one is the name and the value in brackets is the first letter of their occupation.
听到第一个是名字,括号中的值是他们职业的第一个字母。
So far what I have done is
到目前为止我所做的是
SELECT CONCAT(Name,SUBSTR(Occupation,1,1)) FROM OCCUPATIONS;
which output value like this
像这样的输出值
JaneS
JennyS
JuliaD
to get the required format I tried this
为了获得所需的格式我试过这个
SELECT CONCAT(Name,"(",SUBSTR(Occupation,1,1),")") FROM OCCUPATIONS;
then it's throwing an error something like this.
然后它会抛出这样的错误。
SELECT CONCAT(Name,'(',SUBSTR(Occupation,1,1),')') FROM OCCUPATIONS * ERROR at line 1: ORA-00909: invalid number of arguments
SELECT CONCAT(Name,'(',SUBSTR(Occupation,1,1),')') FROM OCCUPATIONS * 第 1 行出错:ORA-00909:参数数量无效
What is the mistake that I have done and what should I do to fix it.
我犯了什么错误,我应该怎么做才能解决它。
回答by Gurwinder Singh
SELECT CONCAT(Name,"(",SUBSTR(Occupation,1,1),")") FROM OCCUPATIONS;
SELECT CONCAT(Name,"(",SUBSTR(Occupation,1,1),")") FROM OCCUPATIONS;
First, the double quotes "
are used to enclose identifiers. use single quote '
to wrap a string.
首先,双引号"
用于将标识符括起来。使用单引号'
包裹字符串。
Second, CONCAT
accepts two params.
其次,CONCAT
接受两个参数。
You could nest bunch of concats, but it's easier and cleaner to use concatenation operation ||
:
您可以嵌套一堆连接,但使用连接操作更容易、更干净||
:
SELECT Name || '(' || SUBSTR(Occupation,1,1) || ')' FROM OCCUPATIONS;
回答by Gordon Linoff
This happens to be one reason why I prefer replace()
over concat()
:
这恰好是一个原因,我更喜欢replace()
在concat()
:
SELECT REPLACE(REPLACE('{Name} ({Occ})', '{Name}', Name'
), '{Occ}', SUBSTR(Occupation, 1, 1)
)
You can readily see the format of the string being created and easily change it. Also, REPLACE()
converts arguments to the appropriate type (which Oracle does with string concatenation anyway).
您可以很容易地看到正在创建的字符串的格式并轻松更改它。此外,REPLACE()
将参数转换为适当的类型(Oracle 无论如何都会使用字符串连接)。
回答by Anmol Mourya
You can use just || for concatenating
你可以只使用 || 用于连接
select c1 || c2 || c3 || c4 as col from mytable
回答by SKP_144
you may try this
你可以试试这个
select CONCAT(CONCAT(FIRST_NAME,' '),LAST_NAME) from employees;
By using this you have to give number of nested CONCAT functions equals to the number of arguments
通过使用它,您必须给出嵌套 CONCAT 函数的数量等于参数的数量
Results
结果
CONCAT(CONCAT(FIRST_NAME,''),LAST_NAME)
- Neena kochhar
- steven king
- Alexander Hunold
- 尼娜·科查尔
- 史蒂文金
- 亚历山大·胡诺德