我的表中有一个名为'regnr'的列,其值为两个字母(如果它达到zz,它将添加一个字母并从aaa开始),后跟数字1-256。
我必须在此列中找到一个范围,然后将“ba50”改为“bc28”
我尝试使用WHERE 'regnr' >= "ba50" AND 'regnr <= "bc25"
这排除了在“ba”范围内以1到4开头的数字,因此100+未显示。当它到达'bb时它显示所有内容,一旦它到达'bc'它只显示它应该显示的一部分。 bc仅显示“BC10”,“BC11”和&amp; “BC2”即使数据库中有注册号BC1到BC25。
答案 0 :(得分:1)
如果您使用MS Access数据库作为前端,则意味着您没有从另一个数据库连接到它 应用程序,您可以使用用户定义的功能来解决此问题。
您可以在MS Access环境中的模块中定义此类功能。
我建议创建一个将regnr值拉伸到固定长度的函数 格式, 到达时,字母占据前4个字符,数字占最后8个字符 一串12个字符,可通过标准不等式运算符进行比较。 例如,如果你给这个函数一个值为&#34; bc25&#34;它将返回&#34; aabc00000025&#34;
以下是执行该功能的功能:
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专栏,如果可能的话。