SQL 字符串函数如何实现多列拼接?

哎呀,让我告诉你一件事。
前年,我帮隔壁的服装厂开发了一个系统。
他们的数据库是Oracle 1 1 g,当时确实很头疼。
我想拼接用户名和订单号,但是我用|| 直接连接。
很多地方都显示NULL,看起来很混乱。
后来改用CONCAT,还得嵌套写CONCAT(first_name, NVL(order_id, '')),看起来有点麻烦,但至少结果是正确的。

我们来谈谈 CONCAT。
我的印象是MySQL用得很多。
第二年就有一个项目。
我们几个IT人员在那里修改数据表。
我们想要将产品名称和规格拼接起来,直接CONCAT(product_name,'-',规格)。
原来SQL Server端的家伙不能使用CONCAT,必须写+'
'+规范。
我还必须使用 ISNULL 来处理空值,否则一切都将为 NULL。
这真的很令人沮丧。

对于分隔符,我经常使用逗号或竖线,只要适合我的眼睛即可。
比如去年某物流公司的表格,我想把快递单号、运费、重量放到一行,所以用了CONCAT(shipment_no, '|', Fee, '|', Weight),这样一目了然。
PostgreSQL兄弟用||,first_name ||就简单多了 ',' || last_name,直接连接,不用担心空值,省事。

但是,如果你真的想写一个兼容性最好的,CONCAT是最好的选择。
前年,我正在和客户一起写一份报告。
他的数据库是SQL Server 2 008 ,我写了一个拼接地址的查询,使用CONCAT(street, ', ', city, ', ', zip),但结果发现跑得很慢。
查了一下,发现老版本的SQL Server中CONCAT必须这样写:CONCAT(street, ',', ISNULL(city, ''), ',', ISNULL(zip, '')), 太糟糕了。
所以你看,写代码的时候不能只满足于自己,你要考虑对方。

哦,顺便说一句,还有一件事。
如果拼接时某个字段可能为空,记得使用COALESCE或者数据库自带的函数填写默认值。
我的一个朋友使用 || 编写了一个查询 去年。
结果因为某个字段为空,导致整个拼接结果为空。
客户抱怨数据丢失,花了很长时间才排查。
这确实是一个陷阱。

总而言之,CONCAT 和|| 可以使用,只要选择你想使用的数据库即可。
不过CONCAT是最可靠的,跨数据库运行时不容易出问题。

sql中如何进行拼接

请不要这样做。

+ 运算符可能会导致 SQL Server 中的类型错误。
这就是坑。

CONCAT 函数的语法在所有数据库中都是一致的。

Oracle和MySQL使用||
SQL Server 使用 + 或 FORMAT。

注意:为每个数据库选择不同的方法。