繁体   English   中英

如何在SQL中将字符串排序为数字?

[英]How to sort strings as numbers in SQL?

谁能告诉我如何解决这个问题? 我的订单是由coursenum(例如,CS 20,CS 25,CS 100都是课程编号)提升。 它计算的是第一个数字而不是整数,但是:

-----------------------------------------
Course                              Grade
-----------------------------------------
CS 120 Intro to Java Programming        A
CS 140 Structured Analysis              A
CS 20 Intro to Computers                F
CS 25 Intro to Programming              B

这里的问题是您的数据库正在进行字符串排序,而不是数字排序。 计算机将无法查看该数据并推断出语义排序顺序。 字符串排序是通过获取两个字符串并比较每个字符直到一个字符位于另一个字符之前完成的。 因此,在您的示例中,每个课程都以“CS”开头,但第四个字符是数字字符(与数字类型不同!)。 “1”的排序低于“2”,然后在“1”中,“2”排序低于“4”,依此类推。

要解决这个问题,您需要填写课程编号(“CS 020”),或者您需要一个单独的数字列和课程编号进行排序。

删除非数字字符并使用to_number(),

with t as (
 select 'CS 120 Intro to Java Programming' course from dual
 union
 select 'CS 140 Structured Analysis' course from dual
 union
 select 'CS 20 Intro to Computers' course from dual
 union
 select 'CS 25 Intro to Programming' course from dual
)
select
  course, regexp_replace(course, '[^0-9]', null) n
from
  t
order by
  to_number(regexp_replace(course, '[^0-9]', null))
;

替代文字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM