ORACLE varchar字段中有汉字和数字,根据数字 order by

项目中有个需求是根据收款方来分类计算小计,并进行排序.

发现排序那一列中有小计和数字的时候,因为都是verchar类型的,所以进行排序之后发现9是在排在了10后面的.

SELECT *
  FROM (
        
        SELECT 1 AS SNO,
                TO_CHAR(ROW_NUMBER() OVER(ORDER BY DI.DISTRIBUTOR_NAME)) NUM,
                DI.DISTRIBUTOR_NAME,
                LCC.HANDLING_CHARGE_MONEY
          FROM LB_CONTRACT_INFO LCI
          LEFT JOIN LC_CALC_CONDITION LCC
            ON LCI.ID = LCC.CONTRACT_ID
          LEFT JOIN DISTRIBUTOR_INFO DI
            ON DI.ID = LCI.DISTRIBUTOR_ID
         WHERE LCI.ID IN ()
        UNION ALL
        SELECT 2 AS SNO,
                '小计' NUM,
                DI.DISTRIBUTOR_NAME,
                SUM(HANDLING_CHARGE_MONEY) AS HANDLING_CHARGE_MONEY
          FROM LB_CONTRACT_INFO LCI
          LEFT JOIN LC_CALC_CONDITION LCC
            ON LCI.ID = LCC.CONTRACT_ID
          LEFT JOIN DISTRIBUTOR_INFO DI
            ON DI.ID = LCI.DISTRIBUTOR_ID
         WHERE LCI.ID
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中,自定义类型含有map、order、constructor的应用场合可以是: 1. 数据库中存储复杂数据类型 在一些情况下,我们需要在Oracle数据库中存储具有复杂结构的数据,例如一个包含多个字段的对象或者一个包含键值对的集合。此时,我们可以使用自定义类型来定义这些数据类型,并且在数据库中进行存储和检索。 举例说明: 我们可以定义一个包含姓名、年龄和地址的人员对象: ``` CREATE TYPE person AS OBJECT ( name VARCHAR2(50), age NUMBER, address VARCHAR2(100) ); ``` 我们也可以定义一个包含多个键值对的集合对象: ``` CREATE TYPE student AS OBJECT ( scores MAP VARCHAR2(50), -- 键值对 order MEMBER FUNCTION get_score(subject VARCHAR2) RETURN NUMBER -- 获取成绩 ); ``` 2. PL/SQL中的复杂数据类型 在PL/SQL中,我们也可以使用自定义类型来定义复杂的数据类型,以便在程序中更方便地处理数据。 举例说明: 我们可以定义一个包含多个字段的结构体类型: ``` CREATE TYPE emp_type IS OBJECT ( empno NUMBER, ename VARCHAR2(50), job VARCHAR2(50), mgr NUMBER, hiredate DATE, sal NUMBER, comm NUMBER, deptno NUMBER ); ``` 我们也可以定义一个包含键值对的集合类型: ``` CREATE TYPE score_type IS TABLE OF NUMBER INDEX BY VARCHAR2(50); ``` 3. 跨平台数据传输 在不同的应用程序或系统之间进行数据传输时,可能会涉及到不同的数据类型和数据格式。此时,我们可以使用自定义类型来定义数据类型,并且在不同的平台之间进行数据传输。 举例说明: 我们可以定义一个包含姓名、年龄和地址的人员对象: ``` CREATE TYPE person_type AS OBJECT ( name VARCHAR2(50), age NUMBER, address VARCHAR2(100) ); ``` 然后,我们可以在Java程序中使用JDBC来访问Oracle数据库,并且将person_type对象进行序列化和反序列化,以便在Java程序和Oracle数据库之间进行数据传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值