sql范围运算符

时间:2010-02-23 17:41:21

标签: sql

是否有SQL构造或技巧来执行以下操作:

SELECT i WHERE i BETWEEN 0 AND 10;

我的第一个想法是创建一个临时表,例如:

CREATE TABLE _range ( i INT PRIMARY KEY );

并填写

INSERT INTO _range VALUES 0;
INSERT INTO _range VALUES 1;

等。

有更好的方法吗?

更新:

我在这种特殊情况下使用sqlite,但我对一般答案很感兴趣。

5 个答案:

答案 0 :(得分:1)

你在使用什么数据库?运算符之间通常是SQL的合法语法。我们一直用它来表示日期范围。

来自http://www.w3schools.com/Sql/sql_between.asp

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

答案 1 :(得分:1)

非常有趣的问题。这是一个丑陋的黑客,除非你的范围非常小,否则可能毫无用处......

select * from (
  select 1 as num  UNION 
  select 2 as num  UNION 
  select 3 as num  UNION 
  select 4 as num  UNION 
  select 5 as num  UNION 
  select 6 as num  UNION 
  select 7 as num  UNION 
  select 8 as num  UNION 
  select 9 as num  UNION 
  select 10 as num
  ) t ;

+-----+
| num |
+-----+
|   1 | 
|   2 | 
  .... 
|   9 | 
|  10 | 
+-----+
10 rows in set (0.00 sec)

编辑:好的,所以我开始思考为什么不使用交叉连接。所以,这是另一个hack,这个很快会在内存表中占据很大的数量,并且可能相当不错。

select POW(2,0)*t0.num + POW(2,1)*t1.num + POW(2,2)*t2.num + POW(2,3)*t3.num  
as num 
from (
  select 0 as num  UNION 
  select 1 as num  
  ) t0, (
  select 0 as num  UNION 
  select 1 as num  
  ) t1, (
  select 0 as num  UNION 
  select 1 as num  
  ) t2, (
  select 0 as num  UNION 
  select 1 as num  
  ) t3 
order by num ;
+------+
| num  |
+------+
|    0 | 
|    1 | 
  ....
|   14 | 
|   15 | 
+------+
16 rows in set (0.00 sec)

很容易达到2的任何幂,并且应该足够快。

答案 2 :(得分:1)

MS SQL 您可以使用 CTE

;with numbs as
(
    select 1 as col 
    union all
    select col + 1 from numbs
    where col < 10
)

select * from numbs

答案 3 :(得分:0)

您没有指定您使用的dbms,但使用Oracle您可以使用CONNECT BY

SELECT ROWNUM-1 i
FROM dual
CONNECT BY ROWNUM <= 10 + 1

答案 4 :(得分:0)

乘以记录的SQL语法是CROSS JOIN 我不确定你的要求和评论,但我想你是想这样做。

我做了类似的事情,用一个日期戳作为字符串“YYYYMM”填充表格,为期20年。