case when语句(SQL)多种用法

SQL Case函数详解
本文介绍了SQL中的Case函数,包括简单Case函数和Case搜索函数两种格式。通过实例对比了两种Case函数的不同应用场景,并强调了Case函数只会返回第一个符合条件的值的特点。
部署运行你感兴趣的模型镜像

case具有两种格式。简单case函数和case搜索函数。

 

--简单case函数
case sex
  when '1' then '男'
  when '2' then '女’
  else '其他' end
--case搜索函数
case when sex = '1' then '男'
     when sex = '2' then '女'
     else '其他' end  

这两种方式可以实现相同的功能,简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。

  where 1=1 and

                  (case when s.PROVID = '0000' then s.PROVID 

                            when s.PROVID <> '0000' then t.areacod 

                            else t.areacod  end) = 

                   (case when s.PROVID = '0000' then '0000' 

                        when s.PROVID <> '0000' then (select max(t1.areacod) from posctycod t1 where t1.provid=s.provid and                                 t1.cityid = s.cityid) 

                    else ''  end)

 

还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

 

--比如说,下面这段sql,你永远无法得到“第二类”这个结果
case when col_1 in ('a','b') then '第一类'
     when col_1 in ('a') then '第二类'
     else '其他' end  

 

您可能感兴趣的与本文相关的镜像

Anything-LLM

Anything-LLM

AI应用

AnythingLLM是一个全栈应用程序,可以使用商用或开源的LLM/嵌入器/语义向量数据库模型,帮助用户在本地或云端搭建个性化的聊天机器人系统,且无需复杂设置

在Presto中,`CASE WHEN`语句是一种强大的条件表达式,用于根据不同的条件返回不同的值。以下是其使用方法、示例及注意事项: ### 使用方法 `CASE WHEN`语句有两种基本形式:简单`CASE`和搜索`CASE`。 - **简单`CASE`**:将一个表达式与一组简单的表达式进行比较来确定结果。 - **搜索`CASE`**:计算一组布尔表达式来确定结果。 ### 相关示例 #### 简单`CASE`示例 ```sql -- 示例暂未找到简单CASE的实例,可参考通用格式 CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END ``` #### 搜索`CASE`示例 - **判断字段是否为`null`**:当判断一个字段是否为`null`时,使用`case when 字段名 is null`,而不是`case 字段名 when null`,后者虽不报错但不生效。例如: ```sql SELECT CASE WHEN column_name IS NULL THEN '字段为空' ELSE '字段不为空' END FROM table_name; ``` - **在一般`SELECT`中的应用**:判断`ReturnTkRate_StaHoursInterval`的值是正数、负数还是`0`。 ```sql SELECT a.ReturnTkRate_DisCountRate, 'Range' = CASE WHEN a.ReturnTkRate_StaHoursInterval > 0 THEN '正数' WHEN a.ReturnTkRate_StaHoursInterval < 0 THEN '负数' ELSE '0' END FROM BaseInfo.ReturnTkRate a ORDER BY a.ReturnTkRate_StaHoursInterval; ``` - **嵌套`CASE WHEN`**:根据不同表的`capital_no`字段进行多层判断。 ```sql SELECT CASE WHEN a.capital_no IS NOT NULL THEN CASE WHEN a.capital_no = 'XHQBZJF001' THEN '小贷' WHEN a.capital_no = 'XHQBZJF002' THEN '启浩保理' WHEN a.capital_no = 'XHQBZJF003' THEN '国民信托' ELSE a.capital_no END WHEN b.capital_no IS NOT NULL THEN CASE WHEN b.capital_no = 'XHQBZJF001' THEN '小贷' WHEN b.capital_no = 'XHQBZJF002' THEN '启浩保理' WHEN b.capital_no = 'XHQBZJF003' THEN '国民信托' ELSE b.capital_no END WHEN c.capital_no IS NOT NULL THEN CASE WHEN c.capital_no = 'XHQBZJF001' THEN '小贷' WHEN c.capital_no = 'XHQBZJF002' THEN '启浩保理' WHEN c.capital_no = 'XHQBZJF003' THEN '国民信托' ELSE c.capital_no END END AS capital_no FROM your_table; ``` - **日期月份转换示例**:将月份数字转换为中文月份。 ```sql SELECT getdate() AS 日期, CASE WHEN month(getdate()) = 11 THEN '十一' WHEN month(getdate()) = 12 THEN '十二' ELSE substring('一二三四五六七八九十', month(getdate()), 1) END + '月' AS 月份; ``` ### 注意事项 - **判断`null`**:判断字段是否为`null`时,必须使用`is null`或`is not null`,不能使用`when null`,因为`when null`不生效[^1]。 - **替代`DECODE`方法**:Presto中不存在`DECODE`方法,应采用`case when then else end`进行替换。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值