sql - 基于 SQL CASE WHEN 或 IIF 反转布尔值
问题描述
我正在尝试根据 MSSQL (MSSQL Server 2017) 中的设置条件反转布尔列
我曾尝试使用 IIF 和 CASE WHEN,但遇到了一些语法错误。
方法一:IIF
SELECT
IIF(Completed_Date > @EndDate AND Completed = 'True', --Conditions
Completed = 'False', Completed)
AS
Completed_Filter
方法 2:CASE WHEN
CASE WHEN
Completed_Date > @EndDate AND Completed = 'True'
THEN
Completed = 'False'
ELSE
Completed END
AS
Completed_Filter
列字段的数据类型为:[COMPLETED] [bit] NULL。
运行一个简单的过滤器查询
SELECT * FROM TABLE WHERE Completed != 'False'
不会产生任何错误,即布尔列可以正常工作。
但是,我很困惑为什么上述 2 个代码片段会导致语法错误,这种错误发生在等号处Completed = 'False'
。
如果没有,我希望将布尔值从 to 反转'True'
,'False'
如果Completed_Date > @EndDate
不是,就让 Completed 布尔值保持原样。
非常感谢任何帮助,谢谢
解决方案
你这样做是不对的
SELECT
IIF(Completed_Date > @EndDate AND Completed = 'True', --Conditions
'False',
Completed
)
AS
Completed_Filter
这与
SELECT CASE WHEN Completed_Date > @EndDate AND Completed = 'True'
THEN 'False'
ELSE Completed
END Completed_Filter
从文档IIF()
返回两个值之一,具体取决于布尔表达式在 SQL Server 中的计算结果是真还是假。
您的布尔表达式是Completed_Date > @EndDate AND Completed = 'True'
,如果满足此条件,则返回第一个值,否则返回第二个值。
当您检查时没有问题'True'/'False'
aBIT
因为它是有效的,字符串值True
并且False
可以转换为位值, 1 是'True'
0 是'False'
。
问题是Completed = 'False'
原因IIF()
,CASE
应该返回一个值,而不是布尔表达式。
推荐阅读
- wpf - 如何在 WPF 应用程序的标签中使用屏幕阅读器读取动态变化的值?
- javascript - Javascript JSON 解析错误:位置 1 处的 JSON 中出现意外标记
- html - 在 CSS 中使绝对子 div 溢出其可滚动的相对根父级
- pycharm - OSError: [WinError 126] 找不到指定的模块
- ios - Facebook 图形 API 链接参数返回 nil
- python - Python - 将列表成对转换为字典
- deployment - 如何部署 Netty 服务器?
- google-sheets - Google Data Studio - datetime 仅显示日期
- javascript - Jest vs React:模块导出和“Jest 遇到了意外的令牌”
- php - Laravel 5.4:邮件通知未发送且没有错误