如果您使用您的 MS Access 数据库作为前端,这意味着您不从另一个应用程序连接到它,您可以使用用户定义的功能来解决这个问题。
您可以在 MS Access 环境中的模块中定义这样的功能。
我建议创建一个函数,将 regnr 值拉伸为固定长度格式,其中字母占据前 4 个字符,数字占据最后 8 个字符,以得到一个 12 个字符的字符串,该字符串可通过标准不等式运算符进行比较. 例如,如果您给该函数一个值“bc25”,它将返回“aabc00000025”
这是执行此操作的函数:
Public Function MakeLong(ByVal regno As String) As String
Dim letters As String
' Extract the letters from regno
Do While regno >= "a"
letters = letters & Left(regno, 1)
regno = Mid(regno, 2)
Loop
' Left-pad letters with "a" to 4 characters, and
' left-pad number with "0" to 8 digits, and concatenate:
MakeLong = Right("aaaa" & letters, 4) & Right("0000000" & regno, 8)
End Function
然后在您的查询中,您可以编写:
WHERE MakeLong('' & regnr) BETWEEN MakeLong("ba50") AND MakeLong("bc25")
如果您希望字母部分占用超过 4 个字符,或者数字部分超过 8 个,您可以相应地调整此函数以返回更长的字符串。
请注意,通过这种 UDF 的使用,您不会从表上的任何索引中受益,因此如果您有很多记录,性能可能会变得非常糟糕。
如果这成为一个问题,我建议尽可能为您的 regnr 列使用不同的编码格式。