Spa*_*2.0 3 sql google-bigquery google-cloud-platform
我已经在 Google Cloud Bigquery 上部署了我的网络应用程序,当我查询数据时出现错误"400 No matching signature for operator BETWEEN for argument types: DATE, STRING, STRING. Supported signature: (ANY) BETWEEN (ANY) AND (ANY) at [2:38]"。这是我的sql:
"""SELECT
Record_Start_Time, Generator_Power
FROM
Furnace.FurnaceData
WHERE
Record_Start_Time BETWEEN TIMESTAMP("2018-01-21")
AND
TIMESTAMP("2018-07-21")
ORDER BY Record_Start_Time
LIMIT 100""".format(request.form['start'],request.form['end'])
Run Code Online (Sandbox Code Playgroud)
根据您收到的错误消息(我同意您问题中的评论,这很奇怪,我怀疑与此特定查询不符),看起来该字段Record_Start_Time的类型为DATE,而在BETWEEN您使用的运算符中TIMESTAMP取而代之的价值观。
您应该了解收到的错误消息的方式如下:
[...] operator BETWEEN for argument types: DATE, STRING, STRING. Supported signature: (ANY) BETWEEN (ANY) AND (ANY)
Run Code Online (Sandbox Code Playgroud)
此错误的装置,对于所支持的签名BETWEEN操作者field BETWEEN a AND b,其中field,a并且b应该是相同类型的(ANY)。此外,错误消息告诉您您正在执行以下操作:_DATE_ BETWEEN _STRING_ AND _STRING_,即您正在尝试将DATE类型与STRING类型进行比较。这看起来很奇怪,因为TIMESTAMP("2018-01-21")是TIMESTAMP类型而不是类型STRING,但我想说,也许您过去曾尝试运行类似 的查询WHERE Record_Start_Time BETWEEN "2018-01-21" AND "2018-07-21",并且您共享的错误消息是与该查询对应的错误消息。对于您共享的查询,错误消息应为:
400 No matching signature for operator BETWEEN for argument types: DATE, TIMESTAMP, TIMESTAMP. Supported signature: (ANY) BETWEEN (ANY) AND (ANY) at [2:38]
Run Code Online (Sandbox Code Playgroud)
长话短说,确认该Record_Start_Time字段是DATE类型并且是这种情况,将您的WHERE子句更改为以下内容:
WHERE
Record_Start_Time BETWEEN DATE("2018-01-21")
AND
DATE("2018-07-21")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20631 次 |
| 最近记录: |