nvarchar中的按数字排序

9o685dep  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(438)

我有一个 nvarchar 我试图在以下查询中按其排序的列:

select youngestage
from table1 
ORDER BY
    CASE WHEN ISNUMERIC(youngestage) = 1 THEN 0 ELSE 1 END
    , CASE WHEN ISNUMERIC(youngestage) = 1 THEN CAST(youngestage AS INT) ELSE 0 END
    , youngestage

结果

0
 1
 1.5
 10
 11
 12
 14
 2
 3

将nvarchar值“1.5”转换为数据类型int时转换失败。
我怎么能这样点菜

YoungestAge
 0
 1
 1.5
 2
 3
10
11
12
14
sxissh06

sxissh061#

使用 try_cast() . 我建议:

ORDER BY TRY_CONVERT(numeric(20, 1), youngestage)
b4lqfgs4

b4lqfgs42#

您有十进制值,所以应该将它们转换为 decimal (或 numeric 例如)而不是 int .
这应该是你想要的:

order by cast(youngestage as decimal(10, 5))

您可能需要根据实际用例调整数据类型的大小和精度。
如果某些值不能转换为十进制,也可以使用 try_cast() 为避免转换错误:

order by try_cast(youngestage as decimal(10, 5))
2skhul33

2skhul333#

你可以用 CAST 函数将nvarchar数据类型转换为order by子句中的decimal。

DECLARE @T TABLE(
Youngestage NVARCHAR(MAX))

INSERT INTO @T VALUES('0')
INSERT INTO @T VALUES('1')
INSERT INTO @T VALUES('1.5')
INSERT INTO @T VALUES('10')
INSERT INTO @T VALUES('11')
INSERT INTO @T VALUES('12')
INSERT INTO @T VALUES('14')
INSERT INTO @T VALUES('2')
INSERT INTO @T VALUES('3')

主要查询:

SELECT * FROM @T 
ORDER BY CAST(Youngestage as decimal(10,2))

相关问题