Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在awk中删除sql函数格式?_Sql_Regex_Awk - Fatal编程技术网

如何在awk中删除sql函数格式?

如何在awk中删除sql函数格式?,sql,regex,awk,Sql,Regex,Awk,我有一个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(MYFIE

我有一个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;
然后我尝试删除所有名为:

  • 测试1
  • 测试2
  • 测试3
  • 职能1
  • 功能2
但保留平均值,最大值,上限,下限。。。以及所有本机函数

因此,期望的输出是:

SELECT MYFIELD, 
       MAX(MYFIELD),
       MAX(MYFIELD),
       AVG(MYFIELD),
       UPPER("stack")
       SUBSTR(MYFIELD, 2, 4),
       MIN(MYFIELD)
       SUBSTR('func1(', 2, 4)
FROM MYTABLE;
我想删除第二行中较低的一行,因为它是要删除的函数之一的参数,在本例中是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;

处理这种情况有什么想法或线索吗?

您可以将函数名重命名为内置函数
合并
,同时保留brakets
和用户函数的其他参数。 它将产生相同的结果,而不是语法上的结果,但除非内置函数不返回
NULL
值,否则它将以相同的方式工作。这将更容易实现,因为你不必担心刹车

如果
文件
是您提供的输入,则:

cat文件| sed's | \(test1\| test2\| func1\| func2\)(|合并(| g')

将产生:

SELECT COALESCE(COALESCE(MYFIELD)),
    COALESCE(MAX(MYFIELD), 4),
    AVG(COALESCE(COALESCE(MYFIELD, COALESCE(4)))),
    COALESCE(UPPER("stack"))
FROM MYTABLE;

这个
test2(MAX(MYFIELD),4),
将产生一个问题,因为它减少到
(MAX(MYFIELD),4),
,不是吗?是的,你当然是对的。好吧……我会试着弄清楚,如果你没有携带内置函数可能返回的
NULL
值,你可以将用户函数更改为内置函数
COALESCE
,它返回第一个非NULL值。然后你就不必再携带关于删除e其余参数。
cat文件| sed's#\(test1\| test2\| func1\| func2\)(#COALESCE(#g'
为什么
,较低(“NOPE”)
预期输出中缺少?删除或不删除
test/func
中内容的规则是什么?是的,但它是要删除的函数之一的参数,在本例中是要删除的test2,它有两个参数。如果我们删除该函数,我们也应该删除其参数。完成!感谢您的时间,@Sundeep!:)不,这不是强制性的。例如,我们可以使用
test2(MAX(MYFIELD),1234),
(我将再次更新主帖子)。不,我的解决方案没有真正意识到嵌套,我在一个接一个地添加补丁:P。对于最新的情况,补丁应该是
sed-E/(test[123]| func[12])\([^,]*,[^)]*)/\2/:a s/(test[123];func[12])([^)]*)/\2/;ta;s/\)\,/),/;s/\),[^]*\),/),/“文件
。。。但这将不会很强劲