我正在尝试在 Azure Synapse 的专用 SQL 池脚本中执行简单的 SELECT 语句。其中之一是:
SELECT regexMatch('abctest','^[A-Za-z]*$');
该语句应该返回True,因为它测试字符串是否仅包含字母。相反,它会生成以下错误消息: “regexMatch”不是可识别的内置函数名称。'
当我检查官方文档时,内置函数是可用的,并且该函数的任务符合预期。 https://learn.microsoft.com/en-us/azure/data-factory/data-flow-expression-functions
我还找到了此页面,其中解释了如何创建管道/数据流来执行正则表达式这些命令。 https://learn.microsoft.com/en-us/azure/data-factory/tutorial-data-flow
我尝试过并且成功了,但是我需要regexMatch 和 regexReplace 函数在简单的 SQL 脚本和 SELECT 命令中工作,它看起来更简单且不那么繁琐。我有什么办法可以做到吗?或者使用数据流是唯一可能的方法吗?
提前致谢。
最佳答案
Azure 数据流表达式与 SQL 查询函数不同。它们并不相同。
目前regexMatch
和regexReplace
不是内置函数,并且在 Synapse SQL 中不受支持。您可以看到我对 regexReplace
遇到了同样的错误.
此外,我在 SQL 数据库中检查了相同的内容,它给出了相同的错误,这意味着 SQL 也不支持这些。
说到Dataflow表达式,它们与spark更相关,而不是与SQL函数相同。
您可以为 SELECT regexMatch('abctest','^[A-Za-z]*$');
构建等效的 SQL 查询使用LIKE
和NOT LIKE
.
SELECT CASE WHEN 'abctest' NOT LIKE '%[^A-Za-z]%' THEN 0 ELSE 1 END AS res;
对于regexReplace
,您需要根据需要使用SQL的字符串函数的组合。
查看此 SO Answer 中给出的一些解决方法通过@Mukus使用replace
, LIKE
, PATINDEX
, LEFT
和RIGHT
.
如果您使用数据流,最好使用数据流中的函数来实现您的要求,因为可能无法复制 SQL 查询中的所有正则表达式。
关于sql - Azure Synapse Analytics 中的 regexMatch 和 regexReplace 函数不会在简单的 SELECT 语句中生成结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76680053/