Sql 甲骨文订单。首字母和数字后
我有一个弹簧靴。使用JdbcTemplate访问Oracle数据库的 我正在从事Oracle Database 12c Enterprise Edition 12.1.0.1.0版-64位产品的Sql 甲骨文订单。首字母和数字后,sql,oracle,oracle12c,Sql,Oracle,Oracle12c,我有一个弹簧靴。使用JdbcTemplate访问Oracle数据库的 我正在从事Oracle Database 12c Enterprise Edition 12.1.0.1.0版-64位产品的 我正在处理一个查询,该查询有几个连接,以返回由VARCHAR2(50)type字段排序的一些值。我想按照以下标准订购:首先是字母,最后是所有数字 select vo_group.company_nr, vo_group.name name, count_vehicle, count_person,
我正在处理一个查询,该查询有几个连接,以返回由VARCHAR2(50)
type字段排序的一些值。我想按照以下标准订购:首先是字母,最后是所有数字
select vo_group.company_nr, vo_group.name name, count_vehicle, count_person, count_key_code
from vo_group
LEFT OUTER JOIN
(select vo_group.vo_group_id, count(*) count_vehicle
from vo_group, vo_group_vehicle, vehicle
where vo_group.vo_group_id=vo_group_vehicle.vo_group_id
and vo_group_vehicle.vehicle_id=vehicle.vehicle_id
and vehicle.vo_vehicle_category_id=1202270
and parent_vo_group_id=20009
group by vo_group.vo_group_id
) g_veh ON vo_group.vo_group_id=g_veh.vo_group_id
LEFT OUTER JOIN
(select vo_group.vo_group_id, count(*) count_person
from vo_group, vo_group_person, person
where vo_group.vo_group_id=vo_group_person.vo_group_id
and vo_group_person.person_id=person.person_id
and person.vo_person_category_id=1006590
and parent_vo_group_id=20900
group by vo_group.vo_group_id
) g_pers ON vo_group.vo_group_id=g_pers.vo_group_id
LEFT OUTER JOIN
(select vo_group.vo_group_id, count(*) count_key_code
from vo_group, vo_group_person, key_code
where vo_group.vo_group_id=vo_group_person.vo_group_id
and parent_vo_group_id=20090
and vo_group_person.person_id = key_code.person_id
group by vo_group.vo_group_id
) g_key ON vo_group.vo_group_id=g_key.vo_group_id
where parent_vo_group_id=20900
order by name
这给了我这个结果:
01411 Distribution Iberia Telecom
101412 Distribution Iberia Power
101440
101545 TDK - Airport Systems
101563 TDK - Waterways North
101564 TDK - Waterways Technics North
101565 TDK - Marine Technics
101590
101593 TDK - Security Aartselaar
101594 TDK - Security Braine
101595 TDK - Security Zaragoza
101842
102441
102470
102610 TDK Panels
103330
202410
202412
202423
202431
202432
202442
202443
202480
222631 TDK Frame agreements
222632 TDK Engineering Revisions
222633 TDK Machining on site
222673
80E510
ATV Technica
BUILDINGS
Buildings - Airdselaar
Buildings - Brainesa
有没有办法先返回字母,然后返回数字?像
ATV Technica
BUILDINGS
Buildings - Airdselaar
Buildings - Brainesa
101411 Distribution Iberia Telecom
101412 Distribution Iberia Power
101440
101545 TDK - Airport Systems
101563 TDK - Waterways North
101564 TDK - Waterways Technics North
101565 TDK - Marine Technics
101590
101593 TDK - Security Aartselaar
101594 TDK - Security Braine
101595 TDK - Security Zaragoza
101842
102441
102470
102610 TDK Panels
103330
202410
202412
202423
202431
202432
202442
202443
202480
222631 TDK Frame agreements
222632 TDK Engineering Revisions
222633 TDK Machining on site
222673
80E510
regexp\u subsr修剪前导数字,从列的开头获取所有非数字字符。
查看结果,我让该列查看regexp表达式的值:
name REGEXP_SUBSTR(name,'[^[:DIGIT:]]*')
aa aa
aa 11 aa
aaaa t aaaa t
bbbb 23 bbbb
11 null
11 a null
11 b null
32 null
当您有数字时,字符串格式是否一致?i、 e.数字后面跟一个空格,后面跟字母(如果有)。是的,确实是。这始终是模式您是否只需要对字符串的开头或字符串中的任何内容进行“异常”排序?例如,您希望'aabb'
位于'22bb'
之前。您是否希望'aabb'
出现在'aa22'
之前?或者仅仅是以数字的子串开头的字符串和空格必须在末尾,但在其他情况下仍然使用“正常”排序?问题是数字将被排序为字符串..而不是实际数字。否-结果不会修剪前导数字。只需查看您的输入11a
和11b
——REGEXP会修剪所有内容(查看结果列)。使用*运算符时,如果字符串以数字开头,则在第一个数字之前有一个空匹配项是有效的。这意味着所有以数字开头的输入都是按任意顺序输出的。@mathguy您的第一条注释是正确的。第二个不是。我还通过name
@mathguy订购了,现在更正了regexp:)的解释
name REGEXP_SUBSTR(name,'[^[:DIGIT:]]*')
aa aa
aa 11 aa
aaaa t aaaa t
bbbb 23 bbbb
11 null
11 a null
11 b null
32 null