2017-09-14 74 views
0

INT我查询这样的:在列active演员布尔在SQLite的

SELECT 
active, cast(active as int) 
FROM samples 

表样品有两行,truefalse,只是为了测试。其结果是:

TRUE 0 
FALSE 0 

虽然true我希望期望值是1。我不明白为什么演员不工作。

回答

2

蒂姆的答案是绝对正确的,但是你的数据,你需要转换字符大小写:

SELECT 
    active, 
    CASE WHEN LOWER(active) = 'true' THEN 1 ELSE 0 END AS active_bool 
FROM samples 

它给你这样的:

TRUE 1 
false 0 
True 1 
1

SQLite中没有布尔类型。最接近的可能只是使用一个整数列,并将0存储为false,将1存储为true。但是,你可以使用一个CASE表达明确的字符串truefalse为1和0分别映射:

SELECT 
    active, 
    CASE WHEN LOWER(active) = 'true' THEN 1 ELSE 0 END AS active_bool 
FROM samples 

回答更新他的回答采取active列的情况下为每评论帐户由@vasek 。

+0

忘了提,我也试过了语法,和它也不起作用。结果仍然是一样的。另外,active是boolean类型的。 – donnadulcinea

+1

在SQLite中没有实际的布尔型数据类型,在内部它只是使用0或1值的整数进行存储。如果我的'CASE'表达式不起作用,那么你的数据不是你所描述的。也许你有空白或填充。 –

+0

@donnadulcinea您也有一个区分大小写的问题。 –