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 语句中合并两列的主要内容,如果未能解决你的问题,请参考以下文章