首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL案例向后处理

MySQL案例向后处理
EN

Stack Overflow用户
提问于 2012-10-16 03:59:01
回答 1查看 1.3K关注 0票数 1

我正在使用CASE清理表格中的一些状态缩写,但它的工作原理与逻辑相反。我单独选择了长度,以表明长度计算正确,所以我认为案例逻辑是不正确的

当我查询时...

代码语言:javascript
运行
复制
SELECT billing_state,
       length(billing_state),
       CASE billing_state
         WHEN length(billing_state) > 2 THEN (select state_abbr from lkup_states where upper(state_name) = billing_state)
         WHEN length(billing_state) = 2 THEN upper(billing_state)
         ELSE 'UNKNOWN'
       END as billing_state_fixed           
  FROM accounts
+---------------+-----------------------+---------------------+
| billing_state | length(billing_state) | billing_state_fixed |
+---------------+-----------------------+---------------------+
| GA            |                     2 | NULL                |
| Alabama       |                     7 | ALABAMA             |
| MS            |                     2 | NULL                |
| FL            |                     2 | NULL                |
| NULL          |                  NULL | UNKNOWN             |
+---------------+-----------------------+---------------------+

然而,当我进入这个奇怪的逻辑时,它就起作用了。

代码语言:javascript
运行
复制
SELECT billing_state,
       length(billing_state),
       CASE billing_state
         WHEN length(billing_state) = 2 THEN (select state_abbr from lkup_states where upper(state_name) = billing_state)
         WHEN length(billing_state) <> 2 THEN upper(billing_state)
         ELSE 'UNKNOWN'
       END as billing_state_fixed           
  FROM accounts

+---------------+-----------------------+---------------------+
| billing_state | length(billing_state) | billing_state_fixed |
+---------------+-----------------------+---------------------+
| GA            |                     2 | GA                  |
| Alabama       |                     7 | AL                  |
| MS            |                     2 | MS                  |
| FL            |                     2 | FL                  |
| NULL          |                  NULL | UNKNOWN             |
+---------------+-----------------------+---------------------+

有没有人能试一试这个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-16 04:04:04

根据the docs的说法,您的语法不太正确。

你把CASE value WHEN compare_valueCASE WHEN expression搞混了。

你可能想要的是:

代码语言:javascript
运行
复制
SELECT billing_state,
       length(billing_state),
       CASE
         WHEN length(billing_state) > 2 THEN (select state_abbr from lkup_states where upper(state_name) = billing_state)
         WHEN length(billing_state) = 2 THEN upper(billing_state)
         ELSE 'UNKNOWN'
       END as billing_state_fixed           
  FROM accounts
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12903080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档