首页 > 解决方案 > 如何将字符串与动态数字或字符连接起来,并在 MS Access db 的 WHERE 和 JOIN 子句中使用它

问题描述

我被要求在 MS Access Db 中添加一个查询。我认为这应该很容易,但是我在 SQL Server 中使用的代码不起作用。

有两个具有公共字段的表。问题是,在一个表中,该字段始终为 8 个字符长度,前导 0(前导 0 的数字),而在另一个表中,只是一个没有前导 0 的数字。这两个字段的数据类型都是短文本。

因此,在 table1 字段中,DIS 将是 00000003,在 table2 字段中,DIS 将是 3,或者,00000022 和 22 指的是相同的值。

所以,要在 MS SQL Server 中运行 WHERE 或 JOIN,我可以做这样的事情

SELECT t1.field1, t1.field2
FROM t1
WHERE t1.DIS = Replicate('0', 8-Len(t1.DIS)) + '3'

OR

SELECT t1.field1, t2.field1
FROM t1 
INNER JOIN t2 ON t1.DIS = Replicate('0', 8-Len(t2.DIS) +'22'

我试图在 MS Access 中执行类似的操作,但出现数据不匹配错误。

SELECT t1.field1, t1.field2 
FROM t1
WHERE t1.DIS = String(8 - LEN(t1.DIS),'0') & '3';

“条件表达式中的数据类型不匹配”是表达式“LEN(t1.DIS)”。我试图将其转换为整数,我认为 CInt 和其他一些方法,但似乎没有任何效果。如果我用数字替换表达式并遵循它就可以了

String(8 - 1,'0') & '3'

谢谢

标签: sqlms-access-2016

解决方案


另一种方法是将值作为整数进行比较:

SELECT t1.field1, t2.field1
FROM t1 INNER JOIN
     t2
     ON CINT(t1.DIS) = CINT(t2.DIS)

对于更大的数字,您可以使用CDEC()

     ON CDEC(t1.DIS) = CDEC(t2.DIS)

推荐阅读