Sql 在没有正则表达式的Firebird中进行现场重复

Sql 在没有正则表达式的Firebird中进行现场重复,sql,firebird,data-quality,Sql,Firebird,Data Quality,我试图创建一个查询,当某个字段的字符都相同时,该查询将拒绝一行。例如,我想选择名为史密斯的人,但不选择名为AAAAA或bbbb的人 我也不能用正则表达式 你会怎么做?嗯,这不是我想要的,但这可以。它对AAAAA有效,但对ABBBB无效 SELECT * FROM PEOPLE WHERE replace(upper(NAME), substring(upper(NAME) FROM 1 FOR 1), '') = '' Firebird提供的正则表达式是由SQL标准委员会定义的,并且是或应该是

我试图创建一个查询,当某个字段的字符都相同时,该查询将拒绝一行。例如,我想选择名为史密斯的人,但不选择名为AAAAA或bbbb的人

我也不能用正则表达式


你会怎么做?

嗯,这不是我想要的,但这可以。它对AAAAA有效,但对ABBBB无效

SELECT *
FROM PEOPLE
WHERE replace(upper(NAME), substring(upper(NAME) FROM 1 FOR 1), '') = ''

Firebird提供的正则表达式是由SQL标准委员会定义的,并且是或应该是为类似PostgreSQL实现而实现的正则表达式。这将对已经为空的字符串产生误报。希望不是空的。你可以试着寻找一个能做到这一点的自定义项,但我找不到,或者为此编写你自己的自定义项。@markrottveel我想做一个。不过,我发布的SQL解决了大部分业务问题,因此我将坚持使用它。我不知道标准中没有合适的正则表达式。我来自甲骨文世界,那里有类似REGEXP_的东西。甲骨文也不尊重这个标准:没有类似的标准。很遗憾,标准委员会认为不值得添加正则表达式,他们坚持你所说的与之类似的可怕的事情。我看到你在开发和维护Jaybird。非常感谢您的出色工作:您是否在FB中编程了存储过程?