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]+'))

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

  • 相关阅读:
    构建之法十五
    十二周学习总结笔记
    构建之法十四
    构建之法十一
    构建之法十三
    用户体验评价
    构建之法第十章
    十一周总结学习笔记
    找水王
    十周总结学习笔记
  • 原文地址:https://www.cnblogs.com/FreeLoopPowter/p/11325328.html
Copyright © 2011-2022 走看看