如何在SQL(访问)中选择一个由2个字母和数字组成的范围(最多256个)

时间:2015-10-31 12:58:03

标签: ms-access ms-access-2000

我的表中有一个名为'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。

1 个答案:

答案 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专栏,如果可能的话。