问题描述
我被要求在 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'
谢谢
解决方法
另一种方法是将值作为整数进行比较:
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)