【问题标题】:Repetitions in field in Firebird without regex没有正则表达式的 Firebird 中的字段重复
【发布时间】:2014-01-29 13:53:27
【问题描述】:

我正在尝试制作一个查询,当某些字段都是相同的字符时拒绝一行。 IE。我想选择名为 Smith 的人,但不选择名为 aaaaaa 或 bbbb 的人。

我不能使用正则表达式,如Firebird's SIMILAR TO doesn't have backreferences

你会怎么做?

【问题讨论】:

  • 您可以尝试寻找可以执行此操作的 UDF(虽然我找不到),或者为此编写您自己的 UDF。
  • @MarkRotteveel 我想过做一个。我发布的 SQL 解决了很大一部分业务问题,所以我会坚持下去。我不知道标准中没有正确的正则表达式。我来自有REGEXP_LIKE 的甲骨文世界。而且甲骨文不尊重标准:没有SIMILAR TO。遗憾的是,标准委员会认为不值得添加正则表达式,并且他们坚持你所说的 SIMILAR TO 是的可怕的事情。我看到您开发和维护 Jaybird。非常感谢您的出色工作:)
  • 你在 FB 中编写过存储过程吗?

标签: sql firebird data-quality


【解决方案1】:

嗯,这不是我想要的,但这会做。它适用于 aaaaaa,但不适用于 abbbbbb。

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

【讨论】:

  • Firebird 提供的正则表达式是 SQL 标准委员会定义的,与 PostgreSQL 的SIMILAR TO 实现的正则表达式相同(或应该)。
  • 这会对已经为空的字符串产生误报。希望不要在 Null 上
猜你喜欢
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2012-07-15
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多