SQL 使用 between 语法验证字母数字值

SQL using between syntax to validate alpha numeric values

我有 2 个表,表 1 有地址范围,表 2 有精确地址。两个表中的所有字段都是字符。我需要确定表 2 中位于表 1 中门牌号范围之间的地址。请看下面的例子。我在 LOW 和 HIGH 之间加入了 Street、City、State 和 HSE#。结果带回了 1201 - 1214 和 101 - 126 TABLE1 记录。将值转换为整数是行不通的,因为某些地址包含字母字符....例如 101B 作为门牌号。你能帮助确定完成此任务的最佳、最准确的方法吗?

表 1

LOW     HIGH    STREET    CITY    STATE
101     126     A ST      MYCITY  MYSTATE
1201    1214    A ST      MYCITY  MYSTATE

表 2

HSE#      STREET    CITY    STATE
1203      A ST      MYCITY  MYSTATE

SELECT *
FROM TABLE1 A,
     TABLE2 B
WHERE B.STATE = A.STATE
  AND B.CITY = A.CITY
  AND B.STREET = A.STREET
  AND B.HSE# BETWEEN A.LOW AND A.HIGH;

这会返回下面示例中的 TABLE1 记录。预期结果是我只得到 LOW/HIGH 范围为 1201/1214 的 TABLE1 值,因为这确实是门牌号所在的范围。

按原样尝试:

SELECT A.LOW, A.HIGH, B.HSE#
FROM
(
VALUES 
  ('101B', '126')
, ('1201', '1214')
) A (LOW, HIGH)
JOIN (VALUES '1203') B(HSE#)
ON 
INT(NULLIF(REGEXP_REPLACE(B.HSE#, '[^0-9]', ''), ''))
BETWEEN 
INT(NULLIF(REGEXP_REPLACE(A.LOW,  '[^0-9]', ''), ''))
AND
INT(NULLIF(REGEXP_REPLACE(A.HIGH, '[^0-9]', ''), ''));

结果是:

|LOW |HIGH|HSE#|
|----|----|----|
|1201|1214|1203|