首页 > 解决方案 > 在 oracle 的 BETWEEN 子句中运行一个查询多个范围

问题描述

我在 oracle 中使用以下 sql 查询来获取工作正常的范围内的行数

SELECT count(SERIALNR)
  FROM my_tab
 WHERE SERIALNR BETWEEN '93266070760000' AND '93266070809999';

但是如果我必须为多个范围运行一个查询,例如下面的全部在一个查询中,如何完成查询

93266070560000  93266070609999
93266070610000  93266070659999
93266070660000  93266070709999
93266070710000  93266070759999
93266070760000  93266070809999

注意:类型SERIALNRNUMBER

标签: sqloracle

解决方案


您似乎需要UNION ALL分别获取每个范围

SELECT 'Range 1' AS "Range", count (SERIALNR) AS "Count"
  FROM tab
 WHERE SERIALNR BETWEEN 93266070560000 AND 93266070809999
 UNION ALL 
SELECT 'Range 2', count (SERIALNR)
  FROM tab
 WHERE SERIALNR BETWEEN 93266070610000 AND 93266070659999
 UNION ALL 
SELECT 'Range 3', count (SERIALNR)
  FROM tab
 WHERE SERIALNR BETWEEN 93266070660000 AND 93266070709999
 UNION ALL 
SELECT 'Range 4', count (SERIALNR)
  FROM tab
 WHERE SERIALNR BETWEEN 93266070710000 AND 93266070759999
 UNION ALL 
SELECT 'Range 5', count (SERIALNR)
  FROM tab
 WHERE SERIALNR BETWEEN 93266070760000 AND 93266070809999

并且您不需要引用 ofSERIALNR作为具有数字数据类型。


推荐阅读