我的數據庫中的表有問題。SQL nvarchar命令
這裏的問題:
爲什麼'BP99999'
比'BP100000'
更大?
每當我在那裏查詢此列由DESC
下令採取'BP99999'
作爲第一行,而不是'BP100000'
附加信息:我的列類型是nvarchar
你有這方面的任何建議嗎?
非常感謝!
我的數據庫中的表有問題。SQL nvarchar命令
這裏的問題:
爲什麼'BP99999'
比'BP100000'
更大?
每當我在那裏查詢此列由DESC
下令採取'BP99999'
作爲第一行,而不是'BP100000'
附加信息:我的列類型是nvarchar
你有這方面的任何建議嗎?
非常感謝!
目前英國石油公司之後的9個大於1,導致您面臨的問題。
可能的解決方案是,您需要從列值中取出前2個字符,然後對整數值進行排序。
你可以嘗試這樣的事:
SELECT [BProject_ID]
FROM [Workload].[dbo].[Bending_Projects]
ORDER BY RIGHT([BProject_ID], LEN([BProject_ID]) - 2)
嗨,感謝您的答案,我試着用你的查詢,但我得到了一個錯誤 「將算術溢出錯誤轉換爲數據類型爲int的表達式。」 這裏是我的查詢:。 '選擇[BProject_ID] FROM [工作負載] [DBO] [Bending_Projects] ORDER BY CAST(ISNULL(NULLIF(ISNUMERIC([BProject_ID]),0),2147888647)爲INT) ' – Blitz
ORDER BY RIGHT([BProject_ID], LEN([BProject_ID]) - 2)
或者簡單
ORDER BY SUBSTRING([BProject_ID],2,8000)
像其他的答案,你只需要收集數量訂購
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
因爲它是一個** **串的'BP'後'9'是** **越大比'1'後BP前綴....因爲它是一個**字符串**它不看數值 - 它只是比較** STRING ** .... –
感謝您的答案 – Blitz