oracle数字与字符的那点事

13 篇文章 0 订阅
最近同事写了一个SQL如下
select crorg_unid               AS crorgUnid,
       crorg_uuid               AS crorgUuid,
       crorg_level_code         AS crorgLevelCode,
       crorg_parent_uuid        AS crorgParentUuid,
       crorg_full_name          AS crorgFullName,
       crorg_short_name         AS crorgShortName,
       crorg_num                AS crorgNum,
       crorg_cract_leader_uuid  AS crorgCractLeaderUuid,
       crorg_cract_admin_uuid   AS crorgCractAdminUuid,
       crorg_address            AS crorgAddress,
       crorg_phone              AS crorgPhone,
       crorg_type               AS crorgType,
       crorg_level              AS crorgLevel,
       crorg_status             AS crorgStatus,
       crorg_ord                AS crorgOrd,
       crorg_cdate              AS crorgCdate,
       crorg_udate              AS crorgUdate,
       crorg_cract_creater_uuid AS crorgCractCreaterUuid,
       crorg_memo               AS crorgMemo,
       crorg_pinyin             AS crorgPinyin,
       crorg_pp_nature          AS crorgPpNature
  from core_organization aa
  join core_account bb on bb.cract_crorg_uuid = aa.crorg_uuid
 where cract_uuid = '0C7B11AD887D4567AD25EEA79152812E'
union all
select dd.*
  from (select crorg_unid               AS crorgUnid,
               crorg_uuid               AS crorgUuid,
               crorg_level_code         AS crorgLevelCode,
               crorg_parent_uuid        AS crorgParentUuid,
               crorg_full_name          AS crorgFullName,
               crorg_short_name         AS crorgShortName,
               crorg_num                AS crorgNum,
               crorg_cract_leader_uuid  AS crorgCractLeaderUuid,
               crorg_cract_admin_uuid   AS crorgCractAdminUuid,
               crorg_address            AS crorgAddress,
               crorg_phone              AS crorgPhone,
               crorg_type               AS crorgType,
               crorg_level              AS crorgLevel,
               crorg_status             AS crorgStatus,
               crorg_ord                AS crorgOrd,
               crorg_cdate              AS crorgCdate,
               crorg_udate              AS crorgUdate,
               crorg_cract_creater_uuid AS crorgCractCreaterUuid,
               crorg_memo               AS crorgMemo,
               crorg_pinyin             AS crorgPinyin,
               crorg_pp_nature          AS crorgPpNature
          from core_organization
         where (select crorg_level_code
                  from core_organization aa
                  join core_account bb on bb.cract_crorg_uuid = aa.crorg_uuid
                 where cract_uuid = '0C7B11AD887D4567AD25EEA79152812E') like crorg_level_code || '%'
           and crorg_type = 1
         order by length(crorg_level_code) desc) dd
 where rownum < 2

虽然语句很复杂,但我今天要说的一个问题其实只与其中的一个字段有关系,所以SQL 不是重要的,就是那个crorg_type它在数据库的定义中是一个字符型,这里写成数字型,在有些情况下是可以的,就是当你数据库中的所有记录的crorg_type取值都为数字时,只要有一条记录取值不是数字都会出现非数字字符的异常,所以还是要严格按照数据类型来写SQL,不要说当前可行,就数字字符都无所谓,从出错来看,数据库内部应该是将数据库中的字符数据转换为数字进行比较,如果存在非数字型字符就没有办法转换,就会报错.后写所以以后写SQL还是严格按类型来,是字符就添加引号,不要因为是数字就不加引号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中,可以使用TO_CHAR函数将数字转换为字符串。TO_CHAR函数的语法为TO_CHAR(expression, format)。其中,expression是要转换的数字,format是指定转换格式的字符串。 例如,使用TO_CHAR函数将数字3.2转换为字符串,可以使用以下语句: SELECT TO_CHAR(3.2, 'FM99999999999990D00') FROM DUAL 。 另外,如果想要将数字转换为字符串,并且保留两位有效小数,可以使用以下语句: SELECT LPAD(RTRIM(TO_CHAR(3.2, 'FM90D99'), TO_CHAR(0, 'D')), 6) 。 需要注意的是,TO_CHAR函数中的format参数可以根据需要进行调整,以满足具体的转换要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ORACLE数字转换为字符串](https://blog.csdn.net/weixin_29343349/article/details/116314620)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [oracle转换数字到格式化字符串](https://blog.csdn.net/menghuannvxia/article/details/117814865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值