2016-01-20 118 views
0

我想畫一個聲明這樣SQL服務器CONCAT功能

SELECT CONCAT(street_name, ' ', street_number) as 'street_detail' 
FROM geo_map 
WHERE CONCAT(street_name, ' ', street_number) LIKE '%' 

我的表是這樣

postal_code int 
building_name nchar(200) 
street_number nchar(60) 
street_name nchar(120) 

結果我得到的只是街道名稱,少了街道號碼,雖然我的街道號碼有價值,但我的concat中有什麼錯誤的想法。

我使用SQL Server

+0

也許問題是你如何讀值。 –

+2

爲什麼這些列是'nchar'而不是'nvarchar'?我懷疑你正在尋找在網格模式的結果和所有'street_name'後面的空格正在推動'屏幕street_number'關閉的權利... –

+1

building_name的nchar(200) - eeeeek! –

回答

2

這是最好用的,而不是NVARCHAR(...)類型NCHAR(...)用於存儲喜歡你有什麼信息。原因是對於NCHAR(...)類型,字符串填充了尾部空格以填充字段的整個長度。

NCHAR(200)字段中的字符串是總是 200個字符寬。的street_name,空間和street_number級聯將是261個字符寬。建築物編號將出現在拼接的第202個字符上。

也許你是不是在你的級聯看到,因爲你的顯示器領域的街道號碼(在你的程序中,SSMS,網頁,...),只是不夠寬。

現在將您的街道名稱存儲在NVARCHAR(200)以及NVARCHAR(...)字段中的幾乎所有其他相關信息中,您就不會有這個問題。存儲在這些領域的字符串是填充尾隨空格,你會看到你在串聯預期的地方你的門牌號碼。