2014-02-25 397 views
1

我的數據庫中的表有問題。SQL nvarchar命令

這裏的問題:

爲什麼'BP99999''BP100000'更大?

每當我在那裏查詢此列由DESC下令採取'BP99999'作爲第一行,而不是'BP100000'

附加信息:我的列類型是nvarchar

你有這方面的任何建議嗎?

非常感謝!

+1

因爲它是一個** **串的'BP'後'9'是** **越大比'1'後BP前綴....因爲它是一個**字符串**它不看數值 - 它只是比較** STRING ** .... –

+0

感謝您的答案 – Blitz

回答

2

目前英國石油公司之後的9個大於1,導致您面臨的問題。

可能的解決方案是,您需要從列值中取出前2個字符,然後對整數值進行排序。

你可以嘗試這樣的事:

SELECT [BProject_ID] 
FROM [Workload].[dbo].[Bending_Projects] 
ORDER BY RIGHT([BProject_ID], LEN([BProject_ID]) - 2) 
+0

嗨,感謝您的答案,我試着用你的查詢,但我得到了一個錯誤 「將算術溢出錯誤轉換爲數據類型爲int的表達式。」 這裏是我的查詢:。 '選擇[BProject_ID] FROM [工作負載] [DBO] [Bending_Projects] ORDER BY CAST(ISNULL(NULLIF(ISNUMERIC([BProject_ID]),0),2147888647)爲INT) ' – Blitz

0
ORDER BY RIGHT([BProject_ID], LEN([BProject_ID]) - 2) 

或者簡單

ORDER BY SUBSTRING([BProject_ID],2,8000) 
0

像其他的答案,你只需要收集數量訂購

ORDER BY RIGHT(BP_ID, (CHAR_LENGTH(BP_ID)) - 2) 

但你仍然需要合作nvert字符串轉換成整數

ORDER BY CAST(RIGHT(BP_ID, (CHAR_LENGTH(BP_ID)) - 2) AS UNSIGNED) 

注:我使用MySQL