Slightly more efficient code is generated for the BETWEEN version (the LHS of 
the between is only calculated once).  It is also somewhat easier to read.

sqlite> select x from x where x between 1 and 10;
QUERY PLAN
`--SCAN TABLE x
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     15    0                    00  Start at 15
1     OpenRead       0     2     0     1              00  root=2 iDb=0; x
2     Noop           0     0     0                    00  Begin WHERE-loop0: x
3     CursorHint     0     0     0     expr           00
4     Rewind         0     13    0                    00
5       Column         0     0     1                    00  r[1]=x.x
6       Lt             3     12    1     (BINARY)       51  if r[1]<r[3] goto 12
7       Gt             4     12    1     (BINARY)       51  if r[1]>r[4] goto 12
8       Noop           0     0     0                    00  Begin WHERE-core
9       Column         0     0     5                    00  r[5]=x.x
10      ResultRow      5     1     0                    00  output=r[5]
11      Noop           0     0     0                    00  End WHERE-core
12    Next           0     5     0                    01
13    Noop           0     0     0                    00  End WHERE-loop0: x
14    Halt           0     0     0                    00
15    Transaction    0     0     1     0              01  usesStmtJournal=0
16    Integer        1     3     0                    00  r[3]=1
17    Integer        10    4     0                    00  r[4]=10
18    Goto           0     1     0                    00

sqlite> select x from x where x >= 1 and x <= 10;
QUERY PLAN
`--SCAN TABLE x
addr  opcode         p1    p2    p3    p4             p5  comment
----  -------------  ----  ----  ----  -------------  --  -------------
0     Init           0     16    0                    00  Start at 16
1     OpenRead       0     2     0     1              00  root=2 iDb=0; x
2     Noop           0     0     0                    00  Begin WHERE-loop0: x
3     CursorHint     0     0     0     AND(GE(c0,1),LE(c0,10))  00
4     Rewind         0     14    0                    00
5       Column         0     0     1                    00  r[1]=x.x
6       Lt             2     13    1     (BINARY)       51  if r[1]<r[2] goto 13
7       Column         0     0     1                    00  r[1]=x.x
8       Gt             3     13    1     (BINARY)       51  if r[1]>r[3] goto 13
9       Noop           0     0     0                    00  Begin WHERE-core
10      Column         0     0     4                    00  r[4]=x.x
11      ResultRow      4     1     0                    00  output=r[4]
12      Noop           0     0     0                    00  End WHERE-core
13    Next           0     5     0                    01
14    Noop           0     0     0                    00  End WHERE-loop0: x
15    Halt           0     0     0                    00
16    Transaction    0     0     1     0              01  usesStmtJournal=0
17    Integer        1     2     0                    00  r[2]=1
18    Integer        10    3     0                    00  r[3]=10
19    Goto           0     1     0                    00


---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a 
lot about anticipated traffic volume.

>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>boun...@mailinglists.sqlite.org] On Behalf Of Cecil Westerhof
>Sent: Wednesday, 29 August, 2018 23:53
>To: SQLite mailing list
>Subject: [sqlite] Better way to get range of dates
>
>When getting data between a range of dates you can use:
>    WHERE  date >= DATE('now', '-7 days')
>       AND date  < DATE('now')
>
>or:
>    WHERE  date BETWEEN
>                    DATE('now', '-7 days')
>                AND DATE('now', '-1 days')
>
>Is there a preferred way? In a way I like the second better.
>
>--
>Cecil Westerhof
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to