我已经搜索过,但找不到特别适合我需求的答案。我有两组数据,需要将第一组(表 1 描述字段(的一部分与列表(表 2(进行比较,并返回每个接口/订单的 VIP 代码。
对于任何描述,唯一相同的标识符是以"003"结尾的 9 位订单 ID。我需要将这个 9 位字符串与另一个表进行比较,该表将始终以订单 ID 开头,但之后可能包含其他字符或数字。我知道 LIKE 比较适用于第二个表,但我无法弄清楚如何将订单号从描述字段中去除。
更新:表 1 是比较路由器接口命令输出的临时表。表 2 是我的静态帐户数据库,其中包含数万个条目,我不想与表 1 进行比较。这就是为什么我不只是拿表二并将订单号与表一进行比较。我特别寻求帮助,以便从表 1 的描述字段中提取 9 位订单 ID。
表1
Interface Description
Ge 1/0/1 blah_bla_123456003_blahlahlah
Ge 1/0/2 blah_blah_bla_234567003_blahahblh
Ge 1/0/3 b_bla_345678003_blhahblah
Ge 1/0/4 bh_blh_ba_456789003_lahlahbl
表2
Order ID VIP Code
123456003.0 Premier
234567003 Wholesale
345678003.6 Normal
456789003.23 Premier
预期成果
Order* VIP Code
123456003 Premier
234567003 Wholesale
345678003 Normal
456789003 Premier
*(stripped from Description)
如果要从表 2 中获取 ID 的前 9 位数字,可以使用 left(table2.id,9)
。它将返回该字段中的前 9 个(左(字符。
然后,您可以将其与 LIKE(使用">%"通配符(或使用正则表达式一起使用。
为什么不将所需的数据存储在每个表的专用列中?将其设置为数字列并对其进行索引,然后您可以使用该列进行非常有效的JOIN
。
SELECT * FROM Table_1 LEFT JOIN Table_2 USING(common_index)
你可以这样说:
select TRUNCATE(tbl2.orderId,0) orderNum, tbl2.vipcode, tbl1.interface
from table2 tbl2 , table1 tbl1
WHERE tbl1.description like CONCAT('%',TRUNCATE(tbl2.orderId,0),'%');
我在这里做了一个小提琴