2017-10-04 130 views
0

使用女士访问2016我试图运行一个SELECT查询来匹配来自表1和表2的列上的字符串。我可以用下面这样做:MSAccess - SQL查询一切到一个字符的右边或左边

SELECT * 
FROM table1 AS a, table2 AS b 
WHERE a.luCode LIKE b.Code 

table1.luCode只有前夕RHAS一个代码,但是,有时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

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

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

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

或者可选择使用instr()具有相同的逻辑。

+0

同意这是一个非常糟糕的主意。以上只是返回不包含“;”的记录(即在b.Code中只有一个代码) –

+0

@OliverBurdekin。 。 。表别名是倒退的。 –

+0

非常好,谢谢Gordon。现在正在工作。我也在研究如何最好地解决这个可怕的数据格式。 –

相关问题