我有一个表(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