Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
如何在ORACLE中查找记录中的偶数位字母和奇数位字母_Oracle - Fatal编程技术网

如何在ORACLE中查找记录中的偶数位字母和奇数位字母

如何在ORACLE中查找记录中的偶数位字母和奇数位字母,oracle,Oracle,请查找以下计算支票数字的规则。客户编号将为8位数字。前7位为一系列,第8位为校验位,如下所示: 将运行编号的所有奇数位数字相加 将运行编号的所有偶数位数字相加 将以上两项之和相乘 取和的模10 因此,根据上述规则,第一个账号为: 第一部分:0030001 奇数位位数之和:0+3+0+1=4 偶数位位数之和:0+0+0=0 上述两个总和的乘积:4x0=0 上述乘积的模10=0 完整的帐号=00300010 第二个帐号: 第一部分:0030002 奇数位位数之和:0+3+0+2=4 偶数位位数之和:

请查找以下计算支票数字的规则。客户编号将为8位数字。前7位为一系列,第8位为校验位,如下所示:

将运行编号的所有奇数位数字相加 将运行编号的所有偶数位数字相加 将以上两项之和相乘 取和的模10 因此,根据上述规则,第一个账号为:

第一部分:0030001 奇数位位数之和:0+3+0+1=4 偶数位位数之和:0+0+0=0 上述两个总和的乘积:4x0=0 上述乘积的模10=0 完整的帐号=00300010 第二个帐号:

第一部分:0030002 奇数位位数之和:0+3+0+2=4 偶数位位数之和:0+0+0=0 上述两个总和的乘积:4x0=0 上述乘积的模10=0 完整的帐号=00300020 还需要在帐号格式中维护以下内容

每个账户的长度必须为8位,7位运行编号和一位支票数字,即最后一位 前导零必须在那里 运行编号必须从30001开始 将oracle标记作为提示,但不允许评论

WITH
Input (str, note) AS (
  SELECT '00300010', 'OK' FROM DUAL UNION ALL
  SELECT '00300020', 'OK' FROM DUAL UNION ALL
  SELECT '00300025', 'check digit wrong' FROM DUAL UNION ALL
  SELECT '00200010', '< 30001' FROM DUAL UNION ALL
  SELECT '0300010', 'too short' FROM DUAL UNION ALL
  SELECT '000200010', 'too long' FROM DUAL UNION ALL
  SELECT 'a0300025', 'not a number' FROM DUAL
)
SELECT
  str
  , note
  , CASE
    WHEN REGEXP_REPLACE(str, '\d{8}', '', 1, 1, '') IS NULL AND
        TO_NUMBER(SUBSTR(str, 1, 7)) > 30000 AND
        MOD((TO_NUMBER(SUBSTR(str, 1, 1)) + 
          TO_NUMBER(SUBSTR(str, 3, 1)) + 
          TO_NUMBER(SUBSTR(str, 5, 1)) + 
          TO_NUMBER(SUBSTR(str, 7, 1)))
          *
          (TO_NUMBER(SUBSTR(str, 2, 1)) + 
          TO_NUMBER(SUBSTR(str, 4, 1)) + 
          TO_NUMBER(SUBSTR(str, 6, 1))),
        10)
        = TO_NUMBER(SUBSTR(str, 8, 1))
      THEN 'TRUE'
    ELSE 'FALSE'
    END valid
  FROM Input
;
返回

|       STR |              NOTE | VALID |
|-----------|-------------------|-------|
|  00300010 |                OK |  TRUE |
|  00300020 |                OK |  TRUE |
|  00300025 | check digit wrong | FALSE |
|  00200010 |           < 30001 | FALSE |
|   0300010 |         too short | FALSE |
| 000200010 |          too long | FALSE |
|  a0300025 |      not a number | FALSE |

它使用SUBSTRstr,1,1获得相应的数字…

一切正常…您希望从中得到什么