sql - Azure Synapse Analytics 中的 regexMatch 和 regexReplace 函数不会在简单的 SELECT 语句中生成结果

标签 sql azure azure-synapse-analytics

我正在尝试在 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 查询函数不同。它们并不相同。

目前regexMatchregexReplace不是内置函数,并且在 Synapse SQL 中不受支持。您可以看到我对 regexReplace 遇到了同样的错误.

enter image description here

此外,我在 SQL 数据库中检查了相同的内容,它给出了相同的错误,这意味着 SQL 也不支持这些。

说到Dataflow表达式,它们与spark更相关,而不是与SQL函数相同。

您可以为 SELECT regexMatch('abctest','^[A-Za-z]*$'); 构建等效的 SQL 查询使用LIKENOT LIKE .

SELECT CASE WHEN 'abctest' NOT LIKE '%[^A-Za-z]%' THEN 0 ELSE 1 END AS res;

enter image description here

对于regexReplace ,您需要根据需要使用SQL的字符串函数的组合。

查看此 SO Answer 中给出的一些解决方法通过@Mukus使用replace , LIKE , PATINDEX , LEFTRIGHT .

如果您使用数据流,最好使用数据流中的函数来实现您的要求,因为可能无法复制 SQL 查询中的所有正则表达式。

关于sql - Azure Synapse Analytics 中的 regexMatch 和 regexReplace 函数不会在简单的 SELECT 语句中生成结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76680053/

相关文章:

sql - SQL:NULL作为ColumnName意味着什么

azure - Visual Studio Code - AZURE COSMOS DB 扩展 - 提供的凭据无效(错误 401)

azure - 如何在不硬编码架构值和存储过程名称的情况下检索 object_id

azure - 当我尝试运行内部联接时,Azure 数据流中出现奇怪的错误

mysql - 我正在尝试使用 MySQL NOT IN 命令,但无济于事,有人能指出我的语法中的错误吗?

java - 为什么我尝试执行此 JDBC 查询时得到此 "SQLSyntaxErrorException: ORA-00933: SQL command not properly ended"?

Azure-Functions:如何从域根提供内容

azure - 一个阶段的输出不可用于后续阶段

azure - Microsoft Purview 无法扫描无服务器表的字段

mysql - 要获取与给定集合元素匹配的记录(所有元素都应该匹配)的 SQL 查询需要使用 AND 而不是 OR