将两个数据库列连接到一个结果集列

Posted

技术标签:

【中文标题】将两个数据库列连接到一个结果集列【英文标题】:concatenate two database columns into one resultset column 【发布时间】:2011-09-19 15:26:44 【问题描述】:

我使用以下 SQL 将一个表中的多个数据库列连接到结果集中的一列中:

SELECT (field1 + '' + field2 + '' + field3) FROM table1

当其中一个字段为空时,我得到整个连接表达式的空结果。我该如何克服这个问题?

数据库是 MS SQL Server 2008。顺便问一下,这是连接数据库列的最佳方式吗?有没有标准的 SQL 这样做?

【问题讨论】:

【参考方案1】:

只需将列转换为 Varchar(Size)

如果两个列都是数字,则使用下面的代码。

例子:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table

col3 的大小是 40 还是别的什么

【讨论】:

【参考方案2】:

如果两个列都是数字,则使用此代码

只需将列转换为 Varchar(Size)

示例:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table

【讨论】:

【参考方案3】:

如果您使用的是 SQL 2012 或更高版本,则可以使用 CONCAT 函数:

SELECT CONCAT(field1, field2, field3) FROM table1

NULL 字段不会破坏您的连接。

@bummi - 感谢您的评论 - 编辑了我的答案以对应它。

【讨论】:

问题是关于 SQLServer 2008 CONCAT 是在 SQLServer 2012 中引入的【参考方案4】:

NULL 的正常行为是任何包含 NULL 的操作都会产生 NULL...

- 9 * NULL  = NULL  
- NULL + '' = NULL  
- etc  

要克服这个问题,请使用 ISNULL 或 COALESCE 将任何 NULL 实例替换为其他内容..

SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1

【讨论】:

【参考方案5】:

执行此操作的 SQL 标准方法是:

SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1

例子:

INSERT INTO table1 VALUES ('hello', null, 'world');
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1;

helloworld

【讨论】:

@Steve 双管是怎么回事? SQL Server 不应该只是 + 吗? || 是 SQL 标准字符串连接运算符。问题问“是否有任何标准 SQL 这样做?”我正在回答这个问题。也许 OP 的意思是问“有没有简单的 SQL 方法来做到这一点?” @Adrian,不仅仅是甲骨文。许多 RDMS 都遵循这里的标准。当你去尝试做string + string 时很高兴知道它,但它失败了,因为你在一个不熟悉的 RDMS 上。一个很好的例子是有史以来部署最广泛的数据库:sqlite3。 (在所有 iPhone 和 android 设备上使用) 好吧,我希望能够在任何数据库上执行该 SQL。我不确定应该调用标准 SQL 还是普通 SQL? 问题标记为sql-server-2008 - ||对连接sql server中的字符串无效【参考方案6】:

如果您对 NULL 值有疑问,请使用 COALESCE 函数将 NULL 替换为您选择的值。您的查询将如下所示:

SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1

http://www.codeproject.com/KB/database/DataCrunching.aspx

【讨论】:

【参考方案7】:

使用 ISNULL 来克服它。

例子:

SELECT (ISNULL(field1, '') + '' + ISNULL(field2, '')+ '' + ISNULL(field3, '')) FROM table1

然后,这会将您的 NULL 内容替换为一个空字符串,这将防止连接操作被评估为整体 NULL 结果。

【讨论】:

以上是关于将两个数据库列连接到一个结果集列的主要内容,如果未能解决你的问题,请参考以下文章

将pyspark列连接到pyspark DataFrame

使用 Scikit-learn 和 Pandas 将编码列连接到原始数据帧

如何将带有列表值的熊猫列连接到一个列表中?

如何在火花数据框中将列连接到一个

将 Access 表中的多个列连接到一个特定行

将一个表的两列连接到另一个表的一列