【问题标题】:Check quotes in string which is number followed by comma检查字符串中的引号,即数字后跟逗号
【发布时间】:2019-07-24 12:07:03
【问题描述】:

我正在创建以字符串作为输入示例的 plsql 函数 ('1234,4565,1212,7658') is right ('1234, 4565,1212,7658') is not right as return ('12345, 4565,121552,7658') 不超过4个字符

我想确保使用函数的用户只输入 2 个引号 只有 4 个字符作为数字并用逗号分隔 如果违反上述任何一项,我如何引发异常。

我尝试过REGEXP_LIKE(Column ,'^['][0-9]{d},[']$') 但它不起作用

我尝试过REGEXP_LIKE(Column ,'^['][0-9]{d},[']$') 但它不起作用

REGEXP_LIKE(Column ,'^['][0-9]{d},[']$') 但它不起作用

预期:

('1234, 4565,1212,7658')

没有预料到

('1234, 
4565,1212,7658')

('123456, 
45654,1212,7658')

【问题讨论】:

  • 我不清楚字符串是像 '1234,5678' 还是 1234,5678;您是否需要检查给定的字符串是否仅由逗号分隔的 4 位数字列表组成,对吗?
  • 嗨 – Aleksej,字符串应该像“1234,5678”。我还需要确保它用单引号括起来,并由逗号分隔的 4 位数字列表组成。

标签: regex oracle plsql


【解决方案1】:

你可以试试这个

WITH tab AS(
  SELECT '''1234,4565,1212,7658''' AS str FROM dual UNION ALL
  SELECT '''1234,4565,4565,1212,7658''' AS str FROM dual UNION ALL
  SELECT '''1234m,4565,1212,7658' AS str FROM dual UNION ALL
  SELECT '''1234,45655,1212,7658' AS str FROM dual UNION ALL
  SELECT '''1234,456,1212,7658''' AS str FROM dual UNION ALL
  SELECT '''1234,4565,1212'',7658''' AS str FROM dual       
)
SELECT * FROM tab t
WHERE REGEXP_LIKE(t.str ,'^['']([[:digit:]]{4},)+([[:digit:]]{4})['']$')

结果:

str
------
'1234,4565,1212,7658'
'1234,4565,4565,1212,7658'

【讨论】:

  • 我如何确保这没有被输入.. ('1234, 回车 4565,1212,7658')
  • REGEXP_LIKE(t.str ,'^['']([[:alnum:]]{4},)+([[:alnum:]]{4})[''] $') 我认为对于字母数字,如果我们将其修改为 alnum,这也应该可以工作
  • @user1742716 是
  • 我注意到 alnum 也选择数字,我如何修改上面的正则表达式以仅选择字符和 charac+numb 但排除数字例如'avds'和'12sf'可以但'1234'不是
  • @user1742716 请不要通过 cmets 扩展您的答案。如果您还有其他问题,那么您应该创建一个新问题。还请描述所有可能的配置。 2位数字+ 2个字符左右只有4位数字1位数字+ 3个字符等等
猜你喜欢
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
相关资源
最近更新 更多