在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中按数字排序的主要内容,如果未能解决你的问题,请参考以下文章

在 t-sql 中转换 nvarchar 变量的排序规则

如何重新格式化和排序存储在 nvarchar 中的日期

"NVARCHAR(255) is null" 带来排序规则冲突

SQL Server:将数据类型 nvarchar 转换为数字时出错

varchar() 和 nvarchar() 之间奇怪的 SQL Server 2005 排序规则差异

如果列数据以数字开头,Like 操作在 nvarchar 列过滤器上不返回任何行