带单引号的 ADF 数据流连接表达式

Posted

技术标签:

【中文标题】带单引号的 ADF 数据流连接表达式【英文标题】:ADF data flow concat expression with single quote 【发布时间】:2020-03-08 02:22:33 【问题描述】:

我需要使用 Azure 数据流表达式生成器生成 SQL 字符串,但它不允许我使用 Concat 函数在字符串之间添加单引号

我需要一个如下的 SQL 字符串

SELECT * FROM ABC WHERE myDate <= '2019-10-10'

这里 2019-10-10 来自一个参数,所以我构建的表达式如下所示

concat('SELECT * FROM ABC WHERE myDate >=','''',$ToDate,'''')

但上述语句无法解析表达式。

使用数据工厂表达式很容易实现这一点,但使用 azure 数据流表达式则不然。

【问题讨论】:

可以试试双引号"' 吗?我测试了只能得到SELECT * FROM ABC WHERE myDate &gt;=SELECT * FROM ABC WHERE myDate &gt;= "2019-10-10" 但正如我想要的那样,作为 SQL 查询,并且在执行时 SQL 查询不允许双引号。 我现在正在询问 Azure 支持,您可以等待我的回复 请看我的回答。如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记,将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢。 您好,您的错误现在解决了吗? 【参考方案1】:

在做了很多试验和实验之后, 我有一个解决方案,使用''(一个额外的引号)而不是'。它会起作用的。 例如。

@concat('Select batchid from execution_Log where Execution_status=''Success'' and Hierachy_ID = ', pipeline().parameters.Hierachy_ID)

【讨论】:

【参考方案2】:

我打电话给 Azure 支持,他们告诉我使用波纹管表达式可以帮助我们在列或数据中添加单引号:

toString('\''+ toString(byName('col2'))+ '\'')

所以你的表达应该是:

concat('SELECT * FROM ABC WHERE myDate &gt;=',toString('\''+ toString(byName('$ToDate'))+ '\'') )

我在我的日期类型 column2 中进行了测试,它运行良好。

希望这会有所帮助。

【讨论】:

【参考方案3】:

今天,你可以这样做:

'select * from saleslt.product where myDate >= \'' + $ToDate + '\''

基本上,只需将 + 与转义的单引号一起使用。

我们将在下周发布一项新的字符串插值功能,以简化此操作。任何表达式、列或参数都可以在双引号内使用。

您的示例将如下所示:

"SELECT * FROM ABC WHERE myDate >='$ToDate'"

容易得多。下周该功能准备就绪后,我会发布公告。

【讨论】:

fyi,SQL Sources with Queries 中的字符串插值目前可怕被破坏了 - 我无法以任何格式解析它,即使是此处提供的文字示例或在文档中。同样,它不能处理多行定义。 使用字符串插值的 SQL 脚本不支持多行,也不支持 \n【参考方案4】:

我也遇到了很多麻烦,试图传递 2 个带引号的时间戳变量。很多线索和错误,我能够使用字符串插值来实现它。表达式最终是:

"SELECT c.data.user_id ... FROM c WHERE c.data.date > 'toString($StartTime)' AND c.data.date <= 'toString($EndTime)'"

【讨论】:

以上是关于带单引号的 ADF 数据流连接表达式的主要内容,如果未能解决你的问题,请参考以下文章

sql语句中,传入的参数带单引号的问题

使用带单引号或双引号的 strlen

带单引号和双引号的 JSON.parse 字符串?

带单引号和双引号的 JSON.parse 字符串?

如何将带单引号的字符串转换为双引号以进行 json 解析

Swift Json 单引号解析