javascript - 参数化 Bigquery 和字符串值数组

标签 javascript node.js parameters google-bigquery parameter-passing

我正在运行一个运行参数化选择查询的nodejs程序。我有以下参数传递给查询

  1. 身份证
  2. 姓名

在我的表中,id 是一个数字字段,而 name 是一个字符串。现在,即使参数化查询中的名称数组由字符串值组成,但最终生成的查询没有字符串形式的名称,因此查询失败。如果我从查询中删除名称并仅使用 Id 运行它,它就会起作用。这是我的查询的样子。


ids = [1,2,3,4,5,6]
names = ["john", "rocky", "sam", "alice"]

const sqlQuery = 'SELECT * FROM `table_name_here` WHERE id IN UNNEST ([' + Ids + ']) AND name IN UNNEST ([' + Names + '])';

**final generated query that runs on bigquery**
SELECT * FROM `jenkins_notifications.prod_notifications_build` WHERE id IN UNNEST ([1,2,3,4,5,6]) AND name IN UNNEST ([john, rocky, sam, alice])

The final query should be like 

SELECT * FROM `jenkins_notifications.prod_notifications_build` WHERE id IN UNNEST ([1,2,3,4,5,6]) AND name IN UNNEST (["john", "rocky", "sam", "alice"])

最佳答案

解决问题最简单、最快的方法是使用下面的名称

names = ["'john'", "'rocky'", "'sam'", "'alice'"]  

或者,更好的选择是使用 map 功能

names.map(function(name) {return "'" + name + "'";}).toString()

如下例所示

ids = [1,2,3,4,5,6]
names = ["john", "rocky", "sam", "alice"]

const sqlQuery = 'SELECT * FROM `table_name_here` WHERE id IN UNNEST ([' + Ids + ']) AND name IN UNNEST ([' + names.map(function(name) {return "'" + name + "'";}).toString() + '])';

关于javascript - 参数化 Bigquery 和字符串值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60429945/

相关文章:

node.js - 任何 redis 调用的 ioredis send 命令的默认超时是多少

sql-server - 调用存储过程,仅指定带值的参数

javascript - Node Jest 在函数中模拟函数

swift - 开括号后的参数

parameters - 使用 SELECT-OPTIONS 作为类方法的导出参数?

javascript - jquery表单发送ajax

javascript - 表达 cookieParser() 困惑

javascript - 如何获取包含滚动的 Div 宽度?

javascript - 字符串替换功能没有响应

javascript - 如何让promise返回结果?