当此排序的列结果包含 SQL 中的所有数字时,如何按数字字符串将 table 排序为数字?

How can I sort a table by a numerical string as a number when this sorted columns results contain all numbers in SQL?

我一直在尝试使用有时用实数填充的字符串列对 table 进行排序,并且我正在使用在我看来像是合理的 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 都不是数字,它似乎不应该尝试转换它,但我想我错了?

我需要用另一种方法来做这件事吗?

基本上,我想搜索 ClientID 的结果集,如果它们都是数字,则按数字顺序排序(8、9、10、11、12 等),但如果结果集中的任何 ClientID 包含非数字字符,只需按字符串排序(有时会导致类似以下内容:1、10、11、2、20 等)。

附加信息

嗯。这是你想要的吗?

SELECT c.*
FROM chemicals c
WHERE ClientID = '9999'
ORDER BY TRY_CONVERT(float, [Client Number]),
         [Client Number],
         MSDS ASC;

在 2012 之前的版本中,您可以使用 case 语句代替 try_convert():

SELECT c.*
FROM chemicals c
WHERE ClientID = '9999'
ORDER BY (CASE WHEN ISNUMERIC([Client Number]) = 1 THEN CONVERT(float, [Client Number]) END),
         [Client Number],
         MSDS ASC;