SUBSTRING在COUNT个查询中无法正常工作

时间:2018-11-07 06:14:05

标签: mysql

如果标题含糊,我深表歉意。

我有一个名为data的表,该表中有一个名为barcode的列 条形码看起来类似于:

TEST210001m1c8Wsa

条形码的格式如下:

工作:TEST2

自动增量编号:10001

类型标识符:m1

唯一ID:c8Wsa

我正在尝试计算整个表的列中与Job,类型ID和唯一ID相匹配的条形码数量。我不关心自动递增。我正在使用以下查询,但它似乎没有按我的预期工作:

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

我肯定我使用的SUBSTRING错误,因为如果删除它,查询将返回预期的结果。有人可以告诉我我在做什么错吗?我确定这是我所缺少的小东西。

3 个答案:

答案 0 :(得分:2)

您需要在substring()函数中为第一个参数指定列名,而对于right()函数也要指定列名

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

答案 1 :(得分:0)

改为使用总和。

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

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

答案 2 :(得分:0)

这是使用REGEXP进行此操作的另一种方法:

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

这假定自动递增编号将始终固定为5位数字。如果它可以是可变的,则可以使用以下模式:

TEST2[0-9]+m1c8Wsa