如果标题含糊,我深表歉意。
我有一个名为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
错误,因为如果删除它,查询将返回预期的结果。有人可以告诉我我在做什么错吗?我确定这是我所缺少的小东西。
答案 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