当前位置: 首页 > 知识库问答 >
问题:

使用类似oracle REGEXP\u的函数查找包含破折号在内的相同数字的SSN

胡光霁
2023-03-14

我试图过滤出与破折号(-)具有相同数字的SSN。这意味着SSN中的所有数字都相同,并遵循xxx-xx-xxxx格式。

示例:

校正过滤值:111-11-1111000-00-0000。

过滤值错误:123-45-6789012-34-5678

数据在Oracle数据库中,所以我使用类似REGEXP_的函数,我的sql如下。

SELECT id FROM table
WHERE id_typ='SSN' 
AND REGEXP_LIKE(id,'^([0-9])(?=\1{2}-\1{2}-\1{4})[0-9]{2}-[0-9]{2}-[0-9]{4}$');

可以在以下位置测试正则表达式:https://regex101.com/r/rA2xA2/13

以上查询没有返回任何数据!

如果我用^[0-9]{3}-[0-9]{2}-[0-9]{4}$替换上述正则表达式,则它返回我的数据,但具有不同的数字ssn,这是正确的行为,但是错误的要求。

那么我错过了什么?

共有2个答案

爱博达
2023-03-14

这是一个有趣(但正确!)的方法来检查社会安全号码中的“所有数字都相等”。假设:给定输入字符串的长度正好为11,第四个和第七个字符是破折号(-),其余的是数字。

with
  inputs ( ssn ) as (
    select '123-00-4020' from dual union all
    select '333-33-3333' from dual union all
    select '013-35-4444' from dual
  )
-- End of simulated inputs. Query begins BELOW THIS LINE.
select ssn
from   inputs
where  mod(to_number(ssn, '999G99G9999', 'nls_numeric_characters='',-'''), 111111111) = 0
;

SSN
-----------
333-33-3333

说明:我将ssn解释为一个数字,用“千”分隔符编写,我声明它是破折号,而不是逗号(如在英语国家)或点(如在世界上大多数其他地方)。我在NLS_NUMERIC_CHARACTERS参数中这样做:我声明是十进制分隔符,-是“group”分隔符。Oracle允许“group”分隔符出现在任何地方——正是因为这个原因,它被称为“group”而不是“千”分隔符。在某些文化中,组不一定是数千个;例如,1亿的一个常见印度符号是10,00,00,000——甲骨文适应了这一点。通过这样做,它也适应了我的黑客攻击——在方便的时候使用“组分隔符”,尽管这不是寓意。

其余的都是琐碎的;当且仅当九位数可被111111111整除时,九位数具有所有相等的位数。

如果要排除这些字符串,请将=更改为=

翟青青
2023-03-14

请参阅此处使用的正则表达式

^(\d)\1{2}-\1{2}-\1{4}$
  • ^在行首断言位置
  • (\d)将任何数字捕获到捕获组1中
  • \1{2}与第一个捕获组最近匹配的相同文本精确匹配两次
  • -逐字匹配连字符
  • \1{2}与第一个捕获组最近匹配的相同文本精确匹配两次
  • -逐字匹配连字符
  • \1{4}匹配与第一个捕获组最近匹配的文本正好四次
  • $在行尾断言位置

 类似资料:
  • 我必须拆分一个包含破折号和减号的字符串。我试图根据unicode字符进行拆分(https://en.wikipedia.org/wiki/Hyphen#Unicode),仍然考虑减号与破折号字符相同。我如何解决它? 预期产出 (国家) (美国) -1个 实际输出量 (国家) (美国) //实际上,这里会打印空行,但编辑器会压缩空行 1. 我想在字符串连接期间会发生一些转换,但不确定。欢迎任何解决这

  • 问题内容: 我有这个json字符串,我知道php变量名称不支持破折号。那么在这种情况下该怎么办? 问题答案: 您可以使用像这样的数组格式。连字符的键将起作用。 这是一个演示

  • 匹配以下条件的正确正则表达式是什么: 两个数字,用破折号(-)分隔 匹配的示例: 123-444 不应匹配的示例: 1234-567 123456-789012 这可能吗?

  • 本文向大家介绍在C ++中找出小于n且包含多个相似数字的整数的程序,包括了在C ++中找出小于n且包含多个相似数字的整数的程序的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个整数n,我们必须找到小于或等于n的正整数个数,其中整数个数至少有一个数字出现一次。 因此,如果输入为n = 200,则输出为38 为了解决这个问题,我们将遵循以下步骤- 定义一个数组 对于初始化x:= n,当x为非零时

  • 我一直在为selenium Xpath定位器使用Contains函数。到目前为止,这个功能一直有效。它目前不适用于表中的TD元素。我正在向函数发送正确的文本,所以我不明白为什么。 在Chrome上,转到此处:https://rcpsc.releasecandidate-community360qa.net/login.aspx?action=enablelogin 登录:mj4/test 向下滚动

  • 问题内容: 改写: 在我的项目中,我有图像。每个图像有5个标签,范围为[1,10]。我用Elasticsearch上传了这些标签: 我将这些文件加载​​到类型为“ img”的索引“ my_project”中的elasticsearch中: 我上传的其他示例文件: 在我的应用程序中,向量要长得多,但是具有固定数量的唯一元素。我喜欢这些文件中的20M。 现在,我想找到给定向量的相似文档。向量具有更多公