将两个数据库列连接到一个结果集列
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 结果。
【讨论】:
以上是关于将两个数据库列连接到一个结果集列的主要内容,如果未能解决你的问题,请参考以下文章