首页 > 解决方案 > 参数化查询 - M 语言 (Excel)

问题描述

我正在尝试使我的查询参数化;这意味着一旦设置了特定单元格中的值,它将是查询将运行的值。

我的问题是单元格中的值是日期,而 MySQL 不理解格式

这是我正在使用的查询:

Select * From ID WHERE `TIME` = '2019-08-26';

我所做的是我去 excel 并使用“从表/范围获取数据”选项创建了一个表,因此该表执行过滤或我想要执行查询的值。

之后我进入电源查询并将我的查询中“时间”的值更改为此它变得动态

`TIME`= " & Text.From(X) & ";"])

现在我表中的值变成了动态过滤器。

然后进入高级编辑器并添加以下内容:

    let 
    Source1 = Excel.CurrentWorkbook(){[Name="Table1_2"]}[Content],
    x= Source1{0}[Date],

Table1_2 作为我创建的表(使用获取数据选项)

[日期] 是上述表格的表头

完成后,power query 会读取如下查询,假设我的表中的值(参数)= 2019-01-01:

SELECT * FROM ID WHERE `TIME` = 2019/01/01 

它返回一个空表,因为我的数据库中的数据格式是 YYYY-MM-DD

这是我面临的第二个问题是:

我希望我的查询根据插入到单元格中的数据与其后一天之间的范围进行过滤(将一天添加到单元格中的值),这意味着表中的值(过滤器/参数)成为一个范围例子:

单元格中的值 = 2019-01-01

查询应该变成

SELECT * FROM ID WHERE `TIME` > '2019-01-01' AND `TIME` < '2019-01-02' 

我累了把时间改成这样:

    `TIME` > " & Text.From(Date.ToText((x),"YYYY-MM-DD"))& " 
and `TIME` < "& Text.From(Date.ToText((Date.AddDays(x,1)),"YYYY-MM-DD")) &";"])

Power Query 仍然不会给我任何结果,因为 excel 完全忽略了我所做的事情,因为表格返回了错误的值。

有谁知道如何解决这个问题?

标签: mysqlexcelpowerquerym

解决方案


格式为(Date.ToText区分大小写)

Date.ToText(x, "yyyy-MM-dd")

然后让

`TIME` = "' & Date.ToText(x, "yyyy-MM-dd") & "';"

对于 SQL。一定要包括'

既然你正在使用Date.ToText,你可以省略Text.From


推荐阅读