Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLite中将布尔值强制转换为Int_Sql_Sqlite_Casting - Fatal编程技术网

在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的整数进行存储。如果my
CASE
表达式不起作用,则您的数据不是您描述的数据。也许您有空格或填充。@donnadulcinea您在这里也有区分大小写的问题。忘了提到我也尝试过这种语法,但它也不起作用。结果仍然是一样的。另外,active是boolean类型的。SQLite中没有实际的boolean数据类型,在内部它只使用一个值为0或1的整数进行存储。如果my
CASE
表达式不起作用,则您的数据不是您描述的数据。也许您有空格或填充。@donnadulcinea您在这里也有区分大小写的问题。