微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较两个字母数字mysql列查找范围之间的邮政编码区域

如何解决比较两个字母数字mysql列查找范围之间的邮政编码区域

我有一个MysqL数据库,其中包含一系列邮政编码区域范围。 我试图找到与给定地区匹配的行,在本示例中为“ SY18”。 我在下面有mySQL查询,但是它返回表中的两个值,因为字段是字母数字。

SELECT rate FROM table WHERE district_from <= 'SY18' AND district_to >= 'SY18'

表格示例

id    district_from    district_to    rate
1     SY1              SY9            10
2     SY16             SY22           20
3     AL1              AL99           37
4     B1               B99            37
5     BB1              BB99           37
6     CB1              CB99           40

如何仅返回正确的结果?

解决方法

您可以使用SUBSTR跳过字符串的第一个字符,然后使用+0将值视为数字。示例:

SELECT v
FROM
(SELECT 'SY1' v UNION SELECT 'SY16') t
WHERE SUBSTR(t.v,3)+0 > 10
;
,
CREATE FUNCTION normalize_district (district VARCHAR(4))
RETURNS VARCHAR(4) DETERMINISTIC
RETURN CONCAT( TRIM(TRAILING CASE WHEN 0 + RIGHT(district,2) > 0 
                                  THEN RIGHT(district,2)
                                  ELSE RIGHT(district,1) END FROM district),LPAD(CASE WHEN 0 + RIGHT(district,2) > 0 
                         THEN 0 + RIGHT(district,2)
                         ELSE 0 + RIGHT(district,1) END,2,'0') );

然后

SELECT *
FROM district_to_test
LEFT JOIN rate ON normalize_district(district_to_test.district) 
                         BETWEEN normalize_district(district_from)
                             AND normalize_district(district_to);

fiddle


0 + RIGHT(district,2) > 0在功能区中,district中的后2个符号是数字。

如果为true,则将由RIGHT()提取2位数字,并且整个表达式的值将大于零(您声称没有'AA0''AA00'之类的值)。 / p>

如果为false,并且仅存在一个数字,则RIGHT()将给出一个以字母开头的子字符串,其值将为零。

基于此,我将整个值划分为前缀和数字后缀,并在数字部分添加零,使其无条件变为2位数字。该值可用于BETWEEN运算符的直接字符串比较。


函数的目标是将值转换为'AA00'格式。为此,我们必须将整个值分为文本部分和数字部分,然后将后者标准化(零填充)。

您可以使用任何其他划分方法。例如,您可以使用LIKE '%\\d\\d'检查值是否包含两位数。或者向后,您可以使用LIKE '\\D\\D%'确定值是否包含两个字母...这些方法具有相对相等的难度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?