SQL Server 的自然排序?

发布于 2024-09-07 15:46:47 字数 144 浏览 6 评论 0原文

我有一列通常只有数字(有时是字母,但这并不重要)。

我怎样才能让它自然排序?

目前排序如下:{1,10,11,12,2,3,4,5,6,7,8,9}

我希望它排序如下:{1,2,3,4,5,6 ,7,8,9,10,11,12}

I have a column that is typically only numbers (sometimes it's letters, but that's not important).

How can I make it natural sort?

Currently sorts like this: {1,10,11,12,2,3,4,5,6,7,8,9}

I want it to sort like this: {1,2,3,4,5,6,7,8,9,10,11,12}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

轮廓§ 2024-09-14 15:46:47

IsNumeric 已“损坏”,ISNUMERIC(CHAR(13)) 返回 1 并且 CAST 将失败。

使用 ISNUMERIC(textval + 'e0')。最终代码:

ORDER BY
  PropertyName,
  CASE ISNUMERIC(MixedField + 'e0') WHEN 1 THEN 0 ELSE 1 END, -- letters after numbers
  CASE ISNUMERIC(MixedField + 'e0') WHEN 1 THEN CAST(MixedField AS INT) ELSE 0 END,
  MixedField

您可以混合订单参数...

IsNumeric is "broken", ISNUMERIC(CHAR(13)) returns 1 and CAST will fail.

Use ISNUMERIC(textval + 'e0'). Final code:

ORDER BY
  PropertyName,
  CASE ISNUMERIC(MixedField + 'e0') WHEN 1 THEN 0 ELSE 1 END, -- letters after numbers
  CASE ISNUMERIC(MixedField + 'e0') WHEN 1 THEN CAST(MixedField AS INT) ELSE 0 END,
  MixedField

You can mix order parameters...

夜吻♂芭芘 2024-09-14 15:46:47

投射它。另外,不要忘记使用 IsNumeric 来确保只返回数字(如果它们包含字母,则很重要;)。

SELECT textval FROM tablename
WHERE IsNumeric(textval) = 1
ORDER BY CAST(textval as int)

另外,转换为将保存最大值的数据类型。

如果您也需要结果集中的非数字,则只需在之前或之后附加一个 UNION 查询,其中 IsNumeric = 0(按您想要的任何顺序排序)。

Cast it. Also, don't forget to use IsNumeric to make sure you only get the numbers back (if they include letters it IS important ;).

SELECT textval FROM tablename
WHERE IsNumeric(textval) = 1
ORDER BY CAST(textval as int)

Also, cast to the datatype that will hold the largest value.

If you need the non-numbers in the result set too then just append a UNION query where IsNumeric = 0 (order by whatever you want) either before or after.

不甘平庸 2024-09-14 15:46:47

使用

“OrderBy ColumnName Asc”进行绑定。

您是否在查询末尾

Have you tied using:

'OrderBy ColumnName Asc'

at the end of your query.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文