sql - case when 与 if else 语句
问题描述
有人可以解释 SQL Server 中的“case when”和“if-else”之间是否存在性能差异吗?在哪种情况下我应该使用哪种语句?
IF DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday')
SELECT 'Weekend';
ELSE
SELECT 'Weekday';
select
case when DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday')
then 'Weekend'
else
'Weekday'
end
解决方案
我在Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
. 它们之间没有性能差异,除了 SELECT CASE 以毫秒为单位稍微领先。
SELECT GETUTCDATE()
GO
--IF DATENAME(SECOND, GETDATE()) IN (N'Saturday', N'Sunday')
-- SELECT 'Weekend';
--ELSE
-- SELECT 'Weekday';
select
case when DATENAME(SECOND, GETDATE()) IN (N'Saturday', N'Sunday')
then 'Weekend'
else
'Weekday'
end
GO 50
SELECT GETUTCDATE()
GO
对于 IF ELSE 逻辑:
选择日期(毫秒,'2020-07-09 04:40:21.170','2020-07-09 04:40:27.693')
--6523 毫秒
对于 CASE 逻辑:SELECT DATEDIFF(MILLISECOND, '2020-07-09 04:41:35.580','2020-07-09 04:41:41.973')
--6393 毫秒
但是,正如@Dale K 所提到的,它们通常有不同的用例。SELECT 有助于一次设置多个变量值。如果是 Else 逻辑,则必须单独设置值。if else 逻辑,内部可以有很多业务逻辑。SELECT CASE 是一个单一的语句。
推荐阅读
- android - 硬编码的应用程序:Preference 中的片段字符串在 Release 中崩溃
- html - ![tab] 快捷方式不适用于刀片扩展
- java - JAVA - 尝试生成 1 到 100000000000 之间的每个数字并放入 txt 文件,我得到了 GC 开销限制
- swift - 引用标签的左侧
- ibm-mq - IBM MQ - 我无法使用通配符语法订阅主题
- google-sheets - 动态添加行以展开 QUERY
- json - 如何使用 jolt 规范更改 mongodb 输出?
- php - Elastich 搜索 - ICU 排序关键字字段 - 挪威语 - 排序时将弹性搜索视为 å
- amazon-web-services - 计划在与 azure 比较的 aws 中启动和停止 Ec2 实例?
- collections - postman 集合的特定文件夹从工具成功运行,但在使用 --folder 选项从 newman 工具运行时抛出 401 错误