sql - 在 SQL 查询中使用字符串(表中的多值字段)作为 where 子句
问题描述
我尝试使用 VBA 重新定义 SQL 查询,以将多值表字段的内容作为 where 子句包含在内,但我无法让它工作。
首先,我从特定的多值字段中收集所有值(格式为文本,由于导入期间的限制,不能使用数字)
BLPN_Query = DLookup("Kostenstellen_Report", "Optionen_Reportgenerierung", "ID=1")
MsgBox 将返回这个(注意“;”和下一个文本之间的空格): 34; 44
该字符串可以包含几个不同的文本条目。我想使用字符串“BLPN_Query”作为 where 子句条件。到目前为止,我得到的是:
"WHERE (PROKALK.NK_STK>0) AND (PROKALK.TERMIN>{d '" & Startjahr & "-01-01'}) AND (PROKALK.BLPNR='" & BLPN_Query & "')"
如果只有一个条目,它可以工作,但如果有多个条目,它将不起作用(显然)。不确定,但我猜分号和下一个文本之间的空格是一个问题,我必须使用“IN”而不是“=”,但我不知道该怎么做。
解决方案(感谢安德烈!)
1.) 从表中获取数据(看起来像:34;35;36),删除空格并用逗号替换分号,包括 IN 子句元素之间的单引号。现在它看起来像:34','35','36
BLPN_Query = DLookup("Kostenstellen_Report", "Optionen_Reportgenerierung", "ID=1")
BLPN_Query = Replace(BLPN_Query, " ", "")
BLPN_Query = Replace(BLPN_Query, ";", "','")
2.) 在 where 子句中包含字符串(并在字符串前后添加单引号) --> 最终字符串:'34','35','36'
AND (PROKALK.BLPNR IN ('" & BLPN_Query & "'))"
它不漂亮,但会帮助我们,直到我们最终获得新的 ERP 系统并可以替换所有旧东西
解决方案
IN (...)
需要逗号,所以你需要这样做:
BLPN_Query = Replace(BLPN_Query, ";", ",")
然后在 WHERE 子句中:
"WHERE ... AND (PROKALK.BLPNR IN (" & BLPN_Query & "))"
额外的空间不会受到伤害。如果BLPN_Query
包含单个值,这也有效,但如果它为空则无效。
推荐阅读
- api-design - 我想构建一个程序,可以从网站访问我的所有财务数据,以跟踪我的资产。我该如何开始?
- rest - 执行 Datastage 数据流设计器 REST API
- r - 将文件读入 R,然后对它们应用相同的函数并返回结果文件
- javascript - WordPress - 在循环外使用变量
- javascript - 垂直行表
- game-theory - 博弈论中静态和动态惩罚中的策略概况
- java - Java Swing 中的冲突
- coldfusion - 无法使用 Chrome 发送带有 PDF 附件的电子邮件
- .htaccess - 如何将带有参数的url从htaccess转换为ngnix?
- javascript - 添加内容安全策略会阻止多个站点的“本地”托管 JavaScript 和其他站点资源