Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 甲骨文订单。首字母和数字后_Sql_Oracle_Oracle12c - Fatal编程技术网

Sql 甲骨文订单。首字母和数字后

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,

我有一个弹簧靴。使用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, 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