在SQLite中将布尔值强制转换为Int
我对此提出质疑:在SQLite中将布尔值强制转换为Int,sql,sqlite,casting,Sql,Sqlite,Casting,我对此提出质疑: SELECT active, cast(active as int) FROM samples 列active中的表格示例有两行,true和false,仅用于测试。结果是: TRUE 0 FALSE 0 而true的预期值是1。我不明白为什么强制转换不起作用。SQLite中没有布尔类型。最接近的可能就是使用整数列,并存储0表示false,存储1表示true。但是,您可以使用CASE表达式将字符串true和false分别显式映射为1和0: SELECT
SELECT
active, cast(active as int)
FROM samples
列active
中的表格示例有两行,true
和false
,仅用于测试。结果是:
TRUE 0
FALSE 0
而
true
的预期值是1
。我不明白为什么强制转换不起作用。SQLite中没有布尔类型。最接近的可能就是使用整数列,并存储0表示false,存储1表示true。但是,您可以使用CASE
表达式将字符串true
和false
分别显式映射为1和0:
SELECT
active,
CASE WHEN LOWER(active) = 'true' THEN 1 ELSE 0 END AS active_bool
FROM samples
根据@vasek在其答案中的注释,答案已更新,以考虑
活动列的情况。SQLite中没有布尔类型。最接近的可能就是使用整数列,并存储0表示false,存储1表示true。但是,您可以使用CASE
表达式将字符串true
和false
分别显式映射为1和0:
SELECT
active,
CASE WHEN LOWER(active) = 'true' THEN 1 ELSE 0 END AS active_bool
FROM samples
根据@vasek在其答案中的评论,更新答案以考虑活动列的大小写。Tim的答案绝对正确,但是对于您的数据,您需要转换字符大小写:
SELECT
active,
CASE WHEN LOWER(active) = 'true' THEN 1 ELSE 0 END AS active_bool
FROM samples
这就给了你:
TRUE 1
false 0
True 1
Tim的回答绝对正确,但是对于您的数据,您需要转换大小写:
SELECT
active,
CASE WHEN LOWER(active) = 'true' THEN 1 ELSE 0 END AS active_bool
FROM samples
这就给了你:
TRUE 1
false 0
True 1
忘了提一下,我也尝试过这种语法,但它也不起作用。结果仍然是一样的。另外,active是boolean类型的。SQLite中没有实际的boolean数据类型,在内部它只使用一个值为0或1的整数进行存储。如果myCASE
表达式不起作用,则您的数据不是您描述的数据。也许您有空格或填充。@donnadulcinea您在这里也有区分大小写的问题。忘了提到我也尝试过这种语法,但它也不起作用。结果仍然是一样的。另外,active是boolean类型的。SQLite中没有实际的boolean数据类型,在内部它只使用一个值为0或1的整数进行存储。如果myCASE
表达式不起作用,则您的数据不是您描述的数据。也许您有空格或填充。@donnadulcinea您在这里也有区分大小写的问题。