我一直在嘗試使用有時填充實數的字符串列對錶進行排序,並且我正在使用對於我來說像一個健全的SQL查詢,但它失敗了,我不知道爲什麼。當這個排序的列結果包含SQL中的所有數字時,如何通過數字字符串將表格排序爲數字?
這裏是我的查詢:
SELECT * FROM chemicals
WHERE ClientID = '9999'
ORDER BY CASE WHEN 0 IN
(SELECT ISNUMERIC([Client Number])
FROM chemicals
WHERE ClientID = '9999')
THEN [Client Number]
ELSE CAST([Client Number] AS float) END ASC, MSDS ASC
而且我不斷收到此錯誤:
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.
現在看來似乎不應該試圖投它,如果它發現任何ClientID
S的在結果集中不是數字,但我想我錯了?
有沒有另一種方法我需要這樣做?
基本上,我想搜索結果集ClientID
s,如果它們都是數字,按數字順序排序(8,9,10,11,12等),但如果結果中有任何ClientID
set包含非數字字符,只需按字符串排序(有時會導致如下所示的內容:1,10,11,2,20等)。
附加信息
- 的
ClientID
實際的數據類型類型爲nchar(10) - 解析的數字需要能夠小數,(這就是爲什麼我使用浮動)。
ISNUMERIC()可以使你的問題......'選擇 '真' WHERE ISNUMERIC( '$' )= 1',你可以用'1e4'和其他值替換$。所以你得到的值等於真,但不能轉換爲浮點數。 'TRY_CONVERT'在2012年有效,但如果沒有,您可以使用PATINDEX方法。只需標記版本即可。 – scsimon
我試過這種'SELECT * FROM MasterClientChemicals WHERE ClientID ='1092'ORDER BY CASE WHEN'true'IN(SELECT'true'FROM MasterClientChemicals WHERE ISNUMERIC([Client MSDS])= 0 AND ClientID ='1092')THEN [Client MSDS] ELSE CAST([客戶端MSDS] AS浮動)END ASC,MSDS ASC',但仍然失敗,出現同樣的錯誤。 – VoidKing
我只是告訴你爲什麼你不能使用isnumeric你的情況 – scsimon