使用Ms Access 2016我正在尝试运行SELECT查询以匹配table1和table2中列的字符串。我可以用以下方法做到这一点:
SELECT *
FROM table1 AS a, table2 AS b
WHERE a.luCode LIKE b.Code
table1.luCode只有eve有一个代码,但是,table2.Code有时会有两个代码用“;”分隔:
table2.Code
--------------------
someCode1
someCode2
someCode3;someCode4
someCode5
如何执行上述查询检查“;”?
的左侧和右侧到目前为止,我一直在尝试使用InStr(在左侧):
SELECT *
FROM table1 AS a, table2 AS b
WHERE a.luCode LIKE LEFT(b.Code,(InStr(1,b.Code,";"))-1);
但是我得到的数据类型不匹配。 弄清楚这将是空字符串的“空”值(在检查它之后似乎是空字符串)我可以添加一个IIF语句:
SELECT *
FROM table1 AS a, table2 AS b
WHERE IIF(b.Code<>"",a.luCode LIKE LEFT(b.Code,(InStr(1,b.Code,";"))-1));
这会引发“无效的过程调用”错误。
我可以在“;”之后用数据创建一个新列但必须有办法用InStr做到这一点。
答案 0 :(得分:1)
首先,这是一种非常非常糟糕的数据格式。你应该有一个表,每个代码都有一行,而不是把它们放在一个字符串中。
有时,我们会遇到其他人糟糕的设计决定。在这种情况下,您可以尝试:
WHERE ';' & b.luCode & ';' LIKE '*;' & a.Code & ';*'
或者使用相同的逻辑使用instr()
。