SQL Server中SELECT列表用布尔表达式为何返回字符串而非1?
问题解释:SQL Server中SELECT列表里的
column=value为何返回值而非判断结果 你遇到的这个现象,核心原因是SQL Server对SELECT子句中email='rowlett@bikes.shop'的语法解析逻辑:
在WHERE子句中,
email='rowlett@bikes.shop'会被当作布尔比较条件执行,筛选出符合条件的行;但在SELECT子句中,这个写法会被解析为别名赋值操作——SQL Server会把'rowlett@bikes.shop'作为返回值,同时将这个结果列的别名设为email,所以最终返回的就是字符串本身。因为SQL Server没有原生布尔类型,无法直接返回比较的真假结果。如果要得到类似1/0的判断标识,需要显式转换比较逻辑:
- 使用CASE表达式:
SELECT CASE WHEN email='rowlett@bikes.shop' THEN 1 ELSE 0 END AS is_match FROM sales.stores WHERE email='rowlett@bikes.shop' - 使用IIF函数(SQL Server 2012及以上版本支持):
SELECT IIF(email='rowlett@bikes.shop', 1, 0) AS is_match FROM sales.stores WHERE email='rowlett@bikes.shop' - 或者将比较结果转为BIT类型:
SELECT CAST((email='rowlett@bikes.shop') AS BIT) AS is_match FROM sales.stores WHERE email='rowlett@bikes.shop'
- 使用CASE表达式:
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

