SQL 在 Select 语句中合并两列

Posted

技术标签:

【中文标题】SQL 在 Select 语句中合并两列【英文标题】:SQL Combine Two Columns in Select Statement 【发布时间】:2011-03-09 14:43:10 【问题描述】:

如果我的数据库中有一个列是 Address1 和 Address2,我如何组合这些列以便我只能在我的 select 语句中对其执行操作,我仍然会将它们分开在数据库中。我希望能够做到这一点

WHERE completeaddress LIKE '%searchstring%'

其中 completedaddress 是 Address1 和 Address2 的组合。 searchstring 就像他们搜索的数据一样。因此,如果他们在 Address1 中有“123 Center St”,在 Address2 中有“Apt 3B”,如果搜索字符串是“Center St 3B”,我将如何选择它。SQL 可以做到这一点吗?

【问题讨论】:

您需要为此查看全文索引。连接的结果将是 '123 Center St Apt 3B' 不匹配 Center St 3B 但是,如果按照我下面的回答使用SOUNDEX,听起来会像这样。 @anothershrubery - 我曾在一个真实世界的应用程序中使用过soundex,但最终将其删除,因为结果很奇怪,没有人理解它们。 select SOUNDEX('123 Center St Apt 3B'),SOUNDEX('Center St 3B') 返回0000,C536 是的,它可能有点奇怪,但它是最接近 atrljoe 想要的执行方式。您可以对SOUNDEX 字符串进行各种其他操作,或使用子字符串来获得更高的准确性。 【参考方案1】:

我想这就是你要找的 -

select Address1+Address2 as CompleteAddress from YourTable
where Address1+Address2 like '%YourSearchString%'

为了防止在我们将地址 1 与地址 2 附加时创建复合词,您可以使用这个 -

select Address1 + ' ' + Address2 as CompleteAddress from YourTable 
where Address1 + ' ' + Address2 like '%YourSearchString%'

因此,“123 Center St”和“Apt 3B”将不是“123 Center StApt 3B”,而是“123 Center St Apt 3B”。

【讨论】:

我希望回答这个问题的每个人都停止将两列附加在一起 ​​- 如果有的话,您很少想要从 address1 中的最后一个单词和 address2 中的第一个单词创建一个新的混合单词 - 您可能想在两者之间留一个空格。 @Damien_The_Unbeliever 更新了我的答案。 @atrljoe - 我不确定如何搜索您在问题中给出的字符串“Center St 3B”? @BharatDodeja 在 PostgreSQL 中 + 不起作用。错误:运算符不存在。 ||很好用!!!谢谢! 如果您事先不知道地址字段的数量,或者如果不同的行填写了不同数量的地址字段,您会怎么做?【参考方案2】:

mysql 中你可以使用:

SELECT CONCAT(Address1, " ", Address2)
WHERE SOUNDEX(CONCAT(Address1, " ", Address2)) = SOUNDEX("Center St 3B")

SOUNDEX 函数在大多数数据库系统中的工作方式类似,我暂时想不到 MSSQL 的语法,但与上面的相差不会太远。

【讨论】:

sql server 中没有 CONCAT。仅适用于 MySQL【参考方案3】:

如果您的address1 = '123 Center St'address2 = 'Apt 3B',那么即使您组合并执行LIKE,您也无法将搜索字符串搜索为'Center St 3B'。但是,如果您的搜索字符串是 'Center St Apt',那么您可以使用 -

WHERE (address1 + ' ' + address2) LIKE '%searchstring%'

【讨论】:

【参考方案4】:
SELECT StaffId,(Title+''+FirstName+''+LastName) AS FullName 
FROM StaffInformation

您在括号中的位置将显示在一个单独的列中。 你想在标题和名字中间写一个点的地方写下面的语法,

SELECT StaffId,(Title+'.'+FirstName+''+LastName) AS FullName 
FROM StaffInformation

这些语法适用于 MS SQL Server 2008 R2 Express Edition。

【讨论】:

【参考方案5】:

如果您不想更改您的数据库架构(而且我不会进行这个简单的查询),您可以将它们组合在过滤器中,如下所示: WHERE (Address1 + Address2) LIKE '%searchstring%'

【讨论】:

以上是关于SQL 在 Select 语句中合并两列的主要内容,如果未能解决你的问题,请参考以下文章

sql select语句,查询出两列结果拼接在一起

sql select语句,查询出两列结果拼接在一起

如何将这些 SQL SELECT 查询合并到一个 SELECT 语句中

求助:SQLSERVER多条查询语句合并

SQL连接两个SELECT语句的麻烦

用LINQ将select中两列的结果合并到一个数组中?