如何匹配' /'但不是' / *' NOR' * /'在postgreSQL中?

时间:2018-04-10 09:53:55

标签: regex postgresql postgresql-9.5

1 /上下文:

我即将结束mySQL数据库迁移到新的postgreSQL数据库。在这种情况下,我不得不翻译"我的例程从mySQL到postgreSQL。

我注意到,在除以零的情况下,两种语言的行为是不同的。如果执行以下查询:

SELECT a/b as result FROM t ;
在mySQL中,列b等于0的行将只返回NULL。相反,在postgreSQL中,您将收到以下错误:

ERROR: division by zero
SQL state: 22012

为了防止这种情况,您显然可以执行以下操作:

SELECT 
a / NULLIF(b,0)
as result
FROM t;

你会得到与mySQL相同的行为(我更喜欢这种行为,因为我觉得它更健壮)。

2 /问题:

事情是,我注意到这种现象只是在"翻译"几乎所有的惯例都是从一种语言到另一种语言。这意味着我没有实现这个"反划分为零"我翻译的第一个例程中的解决方案。因此,我想在计算中找到包含分区的所有例程,以便纠正它们,这样我就可以避免多个"除零"执行期间的错误。

我天真地尝试执行以下查询以获取我必须编辑的所有例程的名称:

SELECT routine_name FROM information_schema.routines 
WHERE routine_definition LIKE '%/%' 
AND routine_schema = 'myschema' ;

问题是此查询还将返回包含至少一个由字符/* */分隔的注释的所有例程的名称。而且我不想得到这些(因为那几乎是我的所有惯例)。

3 /问题:

因此,我希望获得routine_definition匹配/ */ /*的例程。我觉得regular expression matching可以帮助我做到这一点,但我几乎从未使用过这些,即使在阅读了我刚刚链接的文档后,我也感到有些失落。

0 个答案:

没有答案