我有一张这样的表:
CREATE TABLE prices2
(
id_price integer primary key,
date text,
value real
);
让我说我有这个价值观:
insert into prices2( '01/01/2017', 1 );
insert into prices2( '02/01/2017', 2 );
insert into prices2( '02/01/2017', 3 );
insert into prices2( '04/01/2017', 7 );
insert into prices2( '04/01/2017', 6 );
我想知道为什么这个选择是正确的并返回一些结果,以及返回的内容:
select date,
count(*)
from prices2
where date
group by date like '%/01/2017';
也许“date like”%/ 01/2017“是一个布尔表达式,它返回某种值???
答案 0 :(得分:1)
date like '%/01/2017'
确实是一个布尔表达式;在SQLite中,它返回0
或1
:
> select date, date like '%/01/2017' from prices2;
01/01/2017|1
02/01/2017|1
02/01/2017|1
04/01/2017|1
04/01/2017|1
因此,当您在GROUP BY子句中使用此表达式时,您将获得一个1
个值组,以及一个用于0
和NULL
值的组(但没有这个例子)。
至于where date
,documentation说:
SQL语言具有多个上下文,其中计算表达式并将结果转换为布尔值(true或false)。这些背景是:
- SELECT,UPDATE或DELETE语句的WHERE子句,
- [...]
要将SQL表达式的结果转换为布尔值,SQLite首先将结果以与CAST表达式相同的方式将结果转换为NUMERIC值。数字零值(整数值0或实际值0.0)被认为是假的。 NULL值仍为NULL。所有其他值都被认为是真实的。
date
值以非零的数字开头,因此它们被解释为true。