从SQL读取数据时如何将tinyint转换回boolean类型?
将MySQL中tinyint类型的watched字段转换为布尔值查询
表结构
CREATE TABLE MOVIES ( movie_id INTEGER NOT NULL AUTO_INCREMENT, title VARCHAR(50) NOT NULL, watched BOOLEAN NOT NULL, PRIMARY KEY (movie_id) );
当前查询结果
执行select * from movies;得到:
+----------+-------+---------+ | movie_id | title | watched | +----------+-------+---------+ | 1 | bo | 0 | | 2 | NEW | 0 | | 3 | NEW 2 | 0 | +----------+-------+---------+
问题需求
实际存储时watched字段是tinyint类型,需要在查询时自动将其转换为布尔值(0→false,非0→true),无需手动遍历结果转换,目标是把{movie_id: 1, title: 'bo', watched: 0}转为{movie_id: 1, title: 'bo', watched: false}。
解决方案
方法1:使用CASE语句
通过条件判断直接返回布尔值:
SELECT movie_id, title, CASE WHEN watched = 0 THEN FALSE ELSE TRUE END AS watched FROM movies;
方法2:使用IF函数
用MySQL内置的IF函数简化转换逻辑:
SELECT movie_id, title, IF(watched = 0, FALSE, TRUE) AS watched FROM movies;
方法3:利用布尔隐式转换
利用MySQL的布尔规则(0为假,非0为真),通过比较运算直接生成布尔结果:
SELECT movie_id, title, watched <> 0 AS watched FROM movies;
当watched为0时,watched <> 0返回FALSE;非0时返回TRUE,完全符合需求。
内容的提问来源于stack exchange,提问作者boshao13
相关产品推荐
相关产品推荐

