zoukankan      html  css  js  c++  java
  • 记一个开发是遇到的坑之Oralce 字符串排序

            简单描述一下情况,就是存储过程中用一个字符串类型的字段作为患者就诊的排序号,结果莫名发现叫完1号后叫了11、12等患者。用户的反馈不一定准确,自己加了日志的,赶紧拷贝日志来观察一下。结果发现实际情况就是这样的,一边说着不应该呀,一边开始看代码,一个个分析排序用到的字段,经过分析后发现由于这个字段是字符串所以排序规则是一个字符一个字符的比较的,单独写语句测试一下,果然如此。

    WITH T AS
    (SELECT '11' STR
        FROM DUAL
      UNION ALL
      SELECT '2' STR FROM DUAL
      UNION ALL
      SELECT '3' STR FROM DUAL
      UNION ALL
      SELECT '21' STR FROM DUAL
      UNION ALL
      SELECT '30' STR FROM DUAL
      UNION ALL
      SELECT '1' STR FROM DUAL)
    SELECT * FROM T ORDER BY STR;

    输出结果如下:

    1    1
    2    11
    3    2
    4    21
    5    3
    6    30

    由于该字段会存储中文字符,最终利用 状态 字段和取字符串的数字部分转换为数值,然后进行排序。至于

    取其中的数字部分,使用正则表达式

    to_number(regexp_substr(nvl(字段a,0),'[0-9]+'))

    记录一下自己遇到的坑,可能很简单,但是容易忽视。勤于实践、乐于记录,热爱分享。

  • 相关阅读:
    python开源项目
    Appscan 10用户安装手册
    20201201-k8s的node节点和独立nginx部署会冲突
    k8s-更换证书(apiserver新添加了VIP)
    20201224-修改pod网段(calico)
    深-宝的一梦
    洛谷-P3383 【模板】线性筛素数
    洛谷-P3913 车的攻击
    洛谷-P1866 编号
    洛谷-P1100 高低位交换
  • 原文地址:https://www.cnblogs.com/FreeLoopPowter/p/11325328.html
Copyright © 2011-2022 走看看