我是非常新的访问(我通常使用带有Navicat的MySQLi),我需要将10位数的isbn数字转换为13位数。我有以下查询调用一个函数来做这个(我没有创建函数,但它工作,我在执行其他查询时使用它):
SELECT ISBN1013([ISBN]) AS ISBN13, LastSoldDate AS LastSold, Id AS Sku, OnHand AS Quantity, Store
FROM [Store Inventory]
WHERE (((ISBN1013([ISBN])) Like "##########?"));
当我尝试运行它时,一切看起来都很好,然后我收到一条错误消息,指出:标准表达式中的数据类型不匹配。我试图在谷歌和这里查看这个,但我找不到任何解释这个错误的东西。 任何人都可以帮助我吗?
编辑:这里有一些信息如何开始以及它应该如何结束的样本。
0448431351 -> should end up as 9780448431352
0736425543 -> should be 9780736425544
答案 0 :(得分:2)
尝试在ISBN字段周围添加NZ
函数:
SELECT NZ(ISBN1013([ISBN]),"") AS ISBN13
这会将任何空值转换为空字符串。
如果不起作用,请尝试CStr
:
SELECT CStr(ISBN1013([ISBN])) AS ISBN13
这会将任何非字符串值转换为字符串。我知道你说你没有任何空值,但根据我的经验,即使你认为所有数据都符合预期的格式,这也是有用的事情之一。
答案 1 :(得分:1)
我仍然不确定我对这个问题的理解程度如何,但是因为你说没有WHERE
条款就会失误,让我们尝试不同的WHERE
。
我的假设:
ISBN
由10个数字字符组成的行进行操作。并且您的所有10个字符ISBN
值都只包含数字。ISBN
值的行进行操作,如果它们由10个数字后跟一个字母组成。如果这些假设是正确的,请尝试类似于此(未经测试)版本的WHERE子句。
WHERE
Len(ISBN) = 10
OR (
Len(ISBN) = 11
AND ISBN ALike "%[a-z]"
)
答案 2 :(得分:0)
你说你是Access的新手,所以我想我会澄清HansUps的评论。你能看一下VBA模块中的ISBN1013()函数吗?第一行应该是这样的:
Function ISBN1013(ISBN as string) as string
你能检查一下这行是以'string'结尾而不是别的吗?