在SQL中,如何使用concat()将两个或多个参数(包括特殊字符)合并?

3
select CONCAT(address,city) as Address from student order by Address desc;

这是一个查询,用别名Address显示学生表中的地址和城市。
--- Program output ---

ADDRESS
----------------------------------------------------------------------
LMCCoimbatore
FFFVilupuram
BBBAgra
ABCSalem
AAAPondichery


--- Expected output (text)---
ADDRESS
------------------------------------------------------------------------
LMC, Coimbatore
FFF, Vilupuram
BBB, Agra
ABC, Salem
AAA, Pondichery

如何在城市和地址之间添加逗号和空格? 当我使用第三个字符串为“,”时,它会显示参数数量无效的错误。

1
你使用的数据库引擎是哪个? - sle1306
2个回答

3

CONCAT 版本:

我建议使用 CONCAT,因为它可以在至少 MSSQL 中避免在参数为空时返回 NULL。

MSSQL、MySQL、PostgresSQL 和 Teradata 均可使用。

select CONCAT(address,', ',city) as Address from student order by Address desc;

MySQL版本2:

select CONCAT_WS(', ', address,city) as Address from student order by Address desc;

Oracle、IBM DB2和IBM Informix:

select CONCAT(address,CONCAT(', ',city)) as Address from student order by Address desc;

IBM DB2:

select address CONCAT ', ' CONCAT city as Address from student order by Address desc;

非CONCAT版本:

||是ANSI标准,但并非所有系统都使用它。

MSSQL和Sybase IQ:

select address + ', ' + city as Address from student order by Address desc;

MySQL(所谓的邻近操作符,默认行为):

select address ', ' city as Address from student order by Address desc;

PostgresSQL、Oracle、MySQL(使用 SET sql_mode='PIPES_AS_CONCAT';)以及 IBM Informix 和 Sybase IQ:
select address || ', ' || city as Address from student order by Address desc;

它将适用于MS SQL Server,但可能无法与另一个数据库引擎一起使用。 - sle1306
只有Oracle在这种情况下似乎是特殊的。否则,Postgres和MySQL都可以很好地处理它。当然,除非这里使用另一个RDBMS。 - user170442

2

除了其他的回答之外,我想提一下,在SQL中,标准的(ISO 9075)连接运算符是||,但并非所有DB引擎都支持。

select address || ', ' || city

Oracle使用这个


@C-Champagne,谢谢你的回复 - 我已经把它包含在我的答案中了。 - user170442
据我所知,只有两个产品不支持标准字符串连接:MS Access和MS SQL Server。 - Fabian Pijcke
@FabianPijcke:MySQL 需要进行配置以符合 SQL 标准。 - user330315
@RafalZiolkowski 谢谢。你的详尽回答值得肯定。+1 - C.Champagne
谢谢!事实证明,这个简单的功能有比我想象中更多的变化,值得分享。 - user170442

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接