1

我试图计算我的列“routeorder”中有多少记录在 2 个数字之间。该列包含以下信息:

RouteOrder
ACC-001-01
ACC-001-01
ACC-001-01
ACC-001-01
ACC-015-18
ACC-015-18
ACC-015-18
ACC-015-18
ACC-015-19
ACC-015-19
ACC-015-19
ACC-015-19
ACC-015-19
ACC-016-01
ACC-016-01
ACC-016-01
ACC-017-19
ACC-017-19
ACC-017-19
ACC-017-19
ACC-017-19
ACC-017-19
ACC-017-19

我需要在“ACC-001”和“ACC-016”之间获取多少条记录有没有办法做到这一点?这是我到目前为止所拥有的:

SELECT COUNT(*) as areatotals FROM Customers WHERE SUBSTRING(routeorder,LENGTH(routeorder),-3) like 'ACC'

谢谢您的帮助。

4

3 回答 3

2

从官方文档中给出的示例中,您应该能够:

SELECT COUNT(*) as areatotals FROM Customers WHERE routeorder BETWEEN 'ACC-001' AND 'ACC-016';

这应该触发字符串转换,如此所述。

于 2013-09-20T17:38:39.613 回答
2

尝试这个

SELECT count(*) counts,SUBSTRING(SUBSTRING(RouteOrder , 5),1,3 ) as str 
FROM Customers
GROUP BY str
HAVING str > 001 and str < 016

在这里演示

输出:

   COUNTS   STR
    9       015

编辑:

如果第一部分发生变化,这里更简单,更适合您的需求。

 SELECT count(*) counts,SUBSTRING(RouteOrder ,-6 ,3) as str 
 FROM Customers
 GROUP BY str
 HAVING str > 001 and str < 016

在这里演示

于 2013-09-20T17:53:01.907 回答
0

你甚至不需要子串或类型转换任何东西。BETWEENOperator 也适用于字符串:SELECT COUNT(*) FROM test WHERE RouteOrder BETWEEN "ACC-002" AND "ACC-007"

http://sqlfiddle.com/#!2/9614c/1

如果您还想包含 Upperbound 匹配项,请使用SELECT COUNT(*) FROM test WHERE RouteOrder BETWEEN "ACC-002" AND "ACC-007" OR RouteOrder LIKE "ACC-007%"

like你需要,因为当比较字符串ACC-007-1在技术上不小于或等于时ACC-007,这意味着,之间的运算符将排除它)

http://sqlfiddle.com/#!2/9614c/2

于 2013-09-20T18:55:27.927 回答