我有一个sql查询,如下所示:
SELECT test1(func1(MYFIELD)),
test2(MAX(MYFIELD), LOWER("NOPE")),
test3(MAX(MYFIELD), 1234),
AVG(test1(test2(MYFIELD, func1(4)))),
func2(UPPER("stack"))
SUBSTR(MYFIELD, 2, 4),
test2(MIN(MYFIELD), SUBSTR(LOWER(UPPER("NOPE")), 1, 7)),
SUBSTR('func1(', 2, 4)
FROM MYTABLE;
然后我试图删除所有名为的函数:
但保留 AVG,MAX,UPPER,SUBSTR ......以及所有原生函数。
所以期望的输出是:
SELECT MYFIELD,
MAX(MYFIELD),
MAX(MYFIELD),
AVG(MYFIELD),
UPPER("stack")
SUBSTR(MYFIELD, 2, 4),
MIN(MYFIELD)
SUBSTR('func1(', 2, 4)
FROM MYTABLE;
我想删除第二行的 LOWER ,因为它是要删除的函数之一的参数,在本例中是test2,它有两个参数。然后,如果我们删除该函数,我们也应该删除它的参数。
我试图在awk中这样做:
{
print gensub(/(test1|test2|func1|func2)\(/,"","gi", $0);
}
但输出没有考虑正确的括号,它也不会删除自定义函数的其余参数:
SELECT MYFIELD)),
MAX(MYFIELD), LOWER("NOPE")),
MAX(MYFIELD), 1234),
AVG(MYFIELD, 4)))),
UPPER("stack"))
SUBSTR(MYFIELD, 2, 4),
MIN(MYFIELD), SUBSTR(LOWER(UPPER("NOPE")), 1, 7)),
SUBSTR('', 2, 4)
FROM MYTABLE;
处理这种情况的任何想法或线索?
答案 0 :(得分:-1)
您可以将函数的名称重命名为内置函数rake assets:precompile
,同时保留brakets COALESCE
(
和其他用户函数的参数。
它将产生相同的结果,而不是语法,但它将工作相同 UNLESS 内置函数不返回)
值。它会更容易实现,因为您不必担心刹车。
如果NULL
是您提供的输入,则:
file
将产生:
cat file | sed 's#\(test1\|test2\|func1\|func2\)(#COALESCE(#g'