MSAccess - SQL查询字符右侧或左侧的所有内容

时间:2017-10-04 16:54:45

标签: sql database ms-access-2016

使用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做到这一点。

1 个答案:

答案 0 :(得分:1)

首先,这是一种非常非常糟糕的数据格式。你应该有一个表,每个代码都有一行,而不是把它们放在一个字符串中。

有时,我们会遇到其他人糟糕的设计决定。在这种情况下,您可以尝试:

WHERE ';' & b.luCode & ';' LIKE '*;' & a.Code & ';*'

或者使用相同的逻辑使用instr()