2011-03-09 187 views
21

如果我的數據庫中有一列是Address1和Address2,那麼如何組合這些列以便我只能在select語句中對其執行操作,我仍然會將它們分開在數據庫中。我希望能夠做到這一點SQL Select Select語句中的兩列

WHERE completeaddress LIKE '%searchstring%' 

其中完成地址是地址1和地址2的組合。搜索字符串就像他們搜索的數據。因此,如果他們在地址1中有'123 Center St'而在地址2中有'Apt 3B',那麼如果搜索字符串是'Center St 3B',我將如何選擇它。

+3

您需要查看全文索引。連接的結果將是'123 Center St Apt 3B',它與'Centre St 3B'不匹配。' – 2011-03-09 14:49:46

+0

但是聽起來像是這樣,如果按照我的答案使用'SOUNDEX',那麼下面就是這樣。 – anothershrubery 2011-03-09 14:58:48

+0

@anothershrubery - 我曾在真實世界的應用程序中使用過soundex,最終將其刪除,因爲結果奇怪,沒有人理解它們。 '選擇SOUNDEX('123 Center St Apt 3B'),SOUNDEX('Center St 3B')'返回'0000,C536' – 2011-03-09 15:12:43

回答

39

我認爲這是你在找什麼 -

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中心街」和「公寓3B」不會「123中心StApt 3B」,但將是「123中心街公寓3B」。

+5

我希望每個回答這個問題的人都會停止將兩個列附加在一起 ​​- 如果有的話,您很少會想要從地址1中的最後一個單詞和地址2中的第一個單詞創建一個新的混合詞 - 您可能希望在。 – 2011-03-09 14:52:20

+0

@Damien_The_Unbeliever更新了我的答案。 – pavanred 2011-03-09 14:59:51

+0

@atrljoe - 我不知道如何搜索字符串'Center St 3B',如你在問題中給出的? – 2011-03-09 16:26:48

1

如果您address1 = '123 Center St'address2 = 'Apt 3B'那麼即使你結合,做一個LIKE,你不能在搜索字符串爲'Center St 3B'搜索。但是,如果你的搜索字符串爲'Center St Apt',那麼你可以使用做到這一點 -

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

如果你不想改變你的數據庫架構(我不會爲這個簡單的查詢),你只需將它們組合起來像這樣的過濾器: WHERE (Address1 + Address2) LIKE '%searchstring%'

8

在MySQL中,你可以使用:

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

SOUNDEX函數在大多數數據庫系統中的工作方式都很相似,我暫時無法想到MSSQL的語法,但它不會離上述太遠。

+0

儘管sql server中沒有CONCAT。只會在MySQL中工作 – Nik 2014-04-01 19:30:51

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

你在哪裏用括號括起來,這將出現在一列中。 你想點到標題的中間和下方名字寫語法哪裏,

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

這些語法可與MS SQL Server 2008 R2的Express版本。