我有一个表格(policy_details),其中包含“ notenumber ”列,其值为:
150/1 150/2 150/1/2 150/2/1
我需要使用 notenumber asc
的查询顺序显示如下所示的结果集150/1 150/1/2 150/2 150/2/1
我试过了:
select *,REPLACE(notenumber, N'/', N'') AS newnotenumber
from policy_details
order by newnotenumber asc;
我需要按升序获取 notenumber 。
答案 0 :(得分:1)
最好的解决方案是重新设计您的架构,以便将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