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

How to select a range in SQL (access) that consists of 2 letters and numbers (upto 256)

我的 table 中有一个名为 'regnr' 的列,值是两个字母(如果到达 zz,它将添加一个字母并从 aaa 开始)后跟数字 1-256。

我必须在此列中找到一个范围让我们说 "ba50" 到 "bc28"

我尝试使用 WHERE 'regnr' >= "ba50" AND 'regnr <= "bc25"

这不包括 "ba" 范围内以 1 到 4 开头的数字,因此不会显示 100+。当它到达 'bb 时它会显示所有内容,一旦它到达 'bc' 它只显示它应该显示的一部分。 bc 只显示 "BC10", "BC11" & "BC2" 即使数据库中有注册号 BC1 到 BC25.

如果您使用 MS Access 数据库作为前端,这意味着您不会从另一个数据库连接到它 应用程序,您可以使用用户定义函数来解决此问题。

您在 MS Access 环境中的模块中定义了这样一个函数。

我建议创建一个将 regnr 值拉伸为固定长度的函数 格式, 其中字母占据前 4 个字符,数字占据最后 8 个字符,到达 在一个由 12 个字符组成的字符串中,可通过标准不等式运算符进行比较。 因此,例如,如果您给该函数一个 "bc25" 的值,它将 return "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个,你 可以相应地调整此功能以 return 更长的字符串。

请注意,使用 UDF 时,您不会从 table 上的任何索引中获益,因此如果 你有很多记录,性能可能会变得非常糟糕。

如果这成为一个问题,我建议您使用不同的编码格式 regnr 列,如果可能的话。