在nvarchar中按数字排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在nvarchar中按数字排序相关的知识,希望对你有一定的参考价值。
我有一个 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
答案
使用 try_cast()
. 我建议。
ORDER BY TRY_CONVERT(numeric(20, 1), youngestage)
另一答案
你有十进制值,所以你应该把它们转换为: decimal
(或 numeric
而不是 int
.
这应该能达到你想要的目的。
order by cast(youngestage as decimal(10, 5))
你可能需要调整数据类型的大小和精度以适应你的实际用例。
如果你的一些值不能被转换为十进制,你也可以使用 try_cast()
以避免转换错误。
order by try_cast(youngestage as decimal(10, 5))
另一答案
你可以用 CAST
函数来转换 NVARCHAR 数据类型 十进制 在您的订单中的条款。
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))
以上是关于在nvarchar中按数字排序的主要内容,如果未能解决你的问题,请参考以下文章
"NVARCHAR(255) is null" 带来排序规则冲突
SQL Server:将数据类型 nvarchar 转换为数字时出错