count查询中的子字符串未按预期工作

dfty9e19  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(262)

如果标题不明确,我很抱歉。
我有一张table叫 data 在那个表中有一列叫做 barcode 条形码与此类似:

TEST210001m1c8Wsa

条形码的格式如下:
作业:测试2
自动递增编号:10001
类型标识符:m1
唯一id:c8wsa
我试图计算整个表中与job、type id和unique id匹配的列中的条形码数量。我不关心自动递增。我正在使用下面的查询,但它似乎不像我所期望的那样工作:

SELECT COUNT(*) FROM data WHERE barcode LIKE 'test2%' AND SUBSTRING('m1', LENGTH(barcode)-7,2)='m1' AND RIGHT('c8Wsa', 5)='c8Wsa'

我肯定我用的是 SUBSTRING 不正确,因为如果删除它,查询将按预期返回结果。有人能告诉我我做错了什么吗?我肯定我少了一些小东西。

dw1jzc5e

dw1jzc5e1#

您需要为中的第一个参数指定列名 substring() 功能和相同 right() 功能也

SELECT COUNT(*) FROM data 
WHERE barcode LIKE 'test2%' AND SUBSTRING(barcode, LENGTH(barcode)-6,2)='m1' 
AND RIGHT(barcode , 5)='c8Wsa'
b91juud3

b91juud32#

下面是另一种使用 REGEXP :

SELECT COUNT(*)
FROM data
WHERE barcode REGEXP 'TEST2[0-9]{5}m1c8Wsa';

这假设自动递增的数字总是固定在5位。如果可以是可变的,则可以使用以下模式:

TEST2[0-9]+m1c8Wsa
yruzcnhs

yruzcnhs3#

用这样的和来代替。

Select sum(charindex, barcode, 'm1') from table where 
barcode like 'Test2%' and barcode like '%c8Wsa''

这样,您就可以有效地计算由where子句过滤的条形码的所有子字符串。

相关问题