Bis*_*kie 12 sql null concatenation
如果我有桌子
SELECT (Firstname || '-' || Middlename || '-' || Surname) AS example_column
FROM example_table
Run Code Online (Sandbox Code Playgroud)
这将显示Firstname-Middlename-Surname例如
John--Smith
Jane-Anne-Smith
Run Code Online (Sandbox Code Playgroud)
第二个(Jane's)显示正确,但是由于John没有中间名,我希望它忽略第二个破折号.
我怎么能放入一个IF Middlename = NULL语句,以便只显示John-Smith
And*_*lfe 20
这是我的建议:
PostgreSQL和其他SQL数据库在哪里'a' || NULL IS NULL:
SELECT firstname || COALESCE('-' || middlename, '') || '-' || surname ...
Run Code Online (Sandbox Code Playgroud)
Oracle和其他SQL数据库在哪里'a' || NULL = 'a':
SELECT first name || DECODE(middlename, NULL, '', '-' || middlename) || '-' || surname...
Run Code Online (Sandbox Code Playgroud)
我喜欢简洁.对于任何维护程序员来说,中间名是否为空都不是很有趣.CASE开关非常好,但它们很笨重.我想尽可能避免重复相同的列名("中间名").
正如@Prdp所指出的那样,答案是特定于RDBMS的.具体的是服务器是否将零长度字符串视为等效NULL,这决定了连接a是否NULL产生a NULL.
COALESCE对于PostgreSQL风格的空字符串处理,以及DECODE (*VALUE*, NULL, ''...Oracle 风格的空字符串处理,通常最为简洁.
a_h*_*ame 11
如果您使用Postgres,concat_ws()那么您正在寻找:
SELECT concat_ws('-', Firstname, Middlename, Surname) AS example_column
FROM example_table
Run Code Online (Sandbox Code Playgroud)
SQLFiddle:http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/8812
要处理仅包含NULL使用空格的空字符串或字符串nullif():
SELECT concat_ws('-', Firstname, nullif(trim(Middlename), ''), Surname) AS example_column
FROM example_table
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23735 次 |
| 最近记录: |