【问题标题】:How to replace a portion of a SQL query dynamically using JavaScript如何使用 JavaScript 动态替换 SQL 查询的一部分
【发布时间】:2023-04-03 01:35:01
【问题描述】:

我正在使用 Node.js 编写 SQL 查询。查询形成后我会调用数据库来获取数据。

我的查询如下所示,

and technology in (values) and subTechnology in (values) and geo in (values) and

等等。现在values可能是('a')('b', 'c', 'a')。它会动态出现。

现在我想删除部分和technology in (values)。我可以使用str.replace() 方法。但是,对于values 部分,我必须对其进行硬编码。我不想要的。而values 也是动态出现的。 有没有捷径可以做到这一点?

我不想使用for 循环或类似的东西。

【问题讨论】:

  • 也许使用正则表达式从实际字符串中匹配您想要的内容并得到它?或者也许有这些technologysubtechnologygeo 的列表并使用此列表生成最终查询?您可以在生成查询之前从列表中删除不需要的列。
  • 是的,可以使用 substr() 和 indexOf() 方法完成
  • 这里的用例是什么?为什么你不能一开始就按照你想要的方式编写查询?操作 SQL 可能非常棘手,语法充满细微差别,因此不存在通用的解决方案。
  • @tadman:你的观点很好。但是这个字符串在查询的两个或三个部分中使用了其中只有一个地方我想删除上面提到的东西

标签: javascript mysql sql node.js database


【解决方案1】:

是的,可以使用substr()replace()indexOf() 方法来完成。

例如,

var a = "and technology in('a', 'b') and subtechnology in('b', 'd')" 
var b = a.indexOf('technology')
var c = a.indexOf('and', b)
a = a.replace(a.substr(b, c-1), '')

还有更简洁的方法吗?

【讨论】:

  • a.replace(/technology.*?(?=and)/, '')?
  • @Amadan:你的方法是对的。但它会产生一个类似"and and subtechnology in('b', 'd')" 的字符串。我可以处理那件事。你能给我一份关于正则表达式的好文档吗?一个简单而不令人困惑的。
  • 啊,出于某种原因,我认为应该停止之前 "and"a.replace(/technology\s+in\s*\([^)]*\)\s*and\s*/, '') 无论如何应该会更好。看看regular-expression.info
【解决方案2】:

字符串插值呢?

var values = "what ever you want";
var query = `and technology in(${values})`;

现在你的字符串中有一个变量,你可以用这个变量在你的代码中做任何你想做的事情。

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 2020-04-12
    • 2021-06-02
    • 2023-03-31
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多