MySQL按列排序,列中有多个用斜杠分隔的数值


MySQL order by a column which has multiple numerical values separated by slashes

我有一个表(policy_details),其中列' notennumber '的值:

<>之前150/1150/2150/1/2150/2/1之前

我需要下面显示的结果集使用查询顺序 notennumber asc

<>之前150/1150/1/2150/2150/2/1之前

I have try:

select *,REPLACE(notenumber, N'/', N'') AS newnotenumber 
from policy_details 
order by newnotenumber asc;

我需要按升序取 notennumber

最好的解决方案是重新设计模式,将notenumber的每个部分存储在不同的字段中。否则,您需要拆分notenumber的每个部分,将其转换为数字类型,并按其排序。你必须在order by中为你分离出的每个部分添加一个条款,这是没有办法的。

的例子:

select
  notenumber,
  replace(substring(substring_index(notenumber, '/', 1), length(substring_index(notenumber, '/', 1 - 1)) + 1), '/', ''),
  replace(substring(substring_index(notenumber, '/', 2), length(substring_index(notenumber, '/', 2 - 1)) + 1), '/', ''),
  replace(substring(substring_index(notenumber, '/', 3), length(substring_index(notenumber, '/', 3 - 1)) + 1), '/', '')
from test
order by
  convert(replace(substring(substring_index(notenumber, '/', 1), length(substring_index(notenumber, '/', 1 - 1)) + 1), '/', ''), signed integer),
  convert(replace(substring(substring_index(notenumber, '/', 2), length(substring_index(notenumber, '/', 2 - 1)) + 1), '/', ''), signed integer),
  convert(replace(substring(substring_index(notenumber, '/', 3), length(substring_index(notenumber, '/', 3 - 1)) + 1), '/', ''), signed integer)
;

注意,您需要在每个replace子句中插入两次拆分部分的索引号

SQL查询上述解决方案:http://sqlfiddle.com/#!9/dc935/1/0