如何在 MySQL table 中搜索前缀?
How do I search a prefix in a MySQL table?
我得到了一张信用卡,我正在尝试使用卡的前几位数字来确定它使用的是什么类型的信用卡。
例如,如果卡以 4833 开头,那么我的查询应该 return Visa.
如果它以 4026 开头,那么它将 return Visa Electron。
我该如何编写查询来执行此操作?
我的 table 名字是 cards
+-----+---------------+--------+
| id | card_name | prefix |
+-----+---------------+--------+
| 915 | Visa | 4 |
| 916 | Visa Electron | 4026 |
| 917 | Visa Electron | 417500 |
| 918 | Visa Electron | 4405 |
| 919 | Visa Electron | 4508 |
| 920 | Visa Electron | 4844 |
| 921 | Visa Electron | 4913 |
| 922 | Visa Electron | 4917 |
+-----+---------------+--------+
正则表达式适用于您的情况。您需要的正则表达式只是模式后跟通配符。
然而,简单匹配会得到多个结果,例如 4026 将同时匹配 4 和 4026。为了解决这个问题,您选择限制性最强的一个作为匹配项,限制性最强的一个将是长度最长的前缀。
SELECT card_name
FROM cards
WHERE [CREDIT CARD NUMBER] LIKE CONCAT(prefix, '%')
ORDER BY LENGTH(prefix) DESC
LIMIT 1;
我得到了一张信用卡,我正在尝试使用卡的前几位数字来确定它使用的是什么类型的信用卡。
例如,如果卡以 4833 开头,那么我的查询应该 return Visa.
如果它以 4026 开头,那么它将 return Visa Electron。
我该如何编写查询来执行此操作?
我的 table 名字是 cards
+-----+---------------+--------+
| id | card_name | prefix |
+-----+---------------+--------+
| 915 | Visa | 4 |
| 916 | Visa Electron | 4026 |
| 917 | Visa Electron | 417500 |
| 918 | Visa Electron | 4405 |
| 919 | Visa Electron | 4508 |
| 920 | Visa Electron | 4844 |
| 921 | Visa Electron | 4913 |
| 922 | Visa Electron | 4917 |
+-----+---------------+--------+
正则表达式适用于您的情况。您需要的正则表达式只是模式后跟通配符。
然而,简单匹配会得到多个结果,例如 4026 将同时匹配 4 和 4026。为了解决这个问题,您选择限制性最强的一个作为匹配项,限制性最强的一个将是长度最长的前缀。
SELECT card_name
FROM cards
WHERE [CREDIT CARD NUMBER] LIKE CONCAT(prefix, '%')
ORDER BY LENGTH(prefix) DESC
LIMIT 1;