这个问题涉及Postgres 8.3。
我有一个像
这样的字符串NULL + INTERVAL '3 days' > TIMESTAMPTZ '2012-01-01' - INTERVAL '1 month'
>的两侧运算符(也可以是<,=或<>)包含时间戳或NULL,后跟+或 - 以及间隔规范。
如果时间戳为NULL,我想摆脱'+ INTERVAL'3天''。它应该可以使用正则表达式,但我很擅长使用它们。我该怎么做?我想要的一些例子:
1)
NULL + INTERVAL '3 days' > TIMESTAMPTZ '2012-01-01' - INTERVAL '1 month'
应改为
NULL > TIMESTAMPTZ '2012-01-01' - INTERVAL '1 month'
2)
NULL + INTERVAL '3 days' > NULL - INTERVAL '1 month'
应改为
NULL > NULL
3)
TIMESTAMPTZ '2012-01-01' + INTERVAL '3 days' > TIMESTAMPTZ '2012-02-01' - INTERVAL '1 month'
应保持不变。
答案 0 :(得分:2)
正则表达式可能如下所示:
SELECT regexp_replace(txt
, 'NULL [+-] INTERVAL ''.*?'''
, 'NULL'
, 'g') AS txt
FROM (
SELECT * FROM ( VALUES
('NULL + INTERVAL ''33 days'' > TIMESTAMPTZ ''2012-01-01'' - INTERVAL ''1 month''')
, ('NULL + INTERVAL ''3 days'' > NULL - INTERVAL ''1 month''')
, ('TIMESTAMPTZ ''2012-01-01'' + INTERVAL ''3 days'' > TIMESTAMPTZ ''2012-02-01'' - INTERVAL ''1 month''')
) x(txt)
) y
返回:
txt
----------------------------------------------------------------------------------
NULL > TIMESTAMPTZ '2012-01-01' - INTERVAL '1 month'
NULL > NULL
TIMESTAMPTZ '2012-01-01' + INTERVAL '3 days' > TIMESTAMPTZ '2012-02-01' - INTERVAL '1 month'
quantifier *?
是*
的非贪婪版本。