繁体   English   中英

MySQL 替换 SELECT CASE 查询中的值

[英]MySQL replace values in SELECT CASE query

我对 CASE WHEN 有疑问。

我写了一个没有 CASE WHEN 的查询,它看起来像:

SELECT r.data,
       r.data1,
       r.godzina,
       r.zmiana,
       r.nrpartii,
       r.nazwadzianiny,
       r.nazwamaszyny,
       r.rzad,
       r.nrmaszyny,
       r.starynrmaszyny,
       r.nruiglenia,
       r.wydzigla,
       r.waga,
       r.uwagipredkoscmaszyny,
       u1.user_nicename,
       u1.ID,
       u1.display_name 
    FROM jawe_wpdatatable_8 AS r
INNER JOIN jawe_users as u1 on u1.ID = r.uzytkownik

我想要做的是根据 r.godzina 将 r.zmiana 值更改为“1”或“2”或“3”

我正在尝试这样的事情:

SELECT r.data,
       r.data1,
       r.godzina,
       CASE r.zmiana
        WHEN (r.godzina BETWEEN '08:00:00' AND '15:59:99') THEN r.zmiana = 1
        WHEN (r.godzina BETWEEN '16:00:00' AND '23:59:99') THEN r.zmiana = 2
        ELSE r.zmiana = 3
       END,
       r.nrpartii,
       r.nazwadzianiny,
       r.nazwamaszyny,
       r.rzad,
       r.nrmaszyny,
       r.starynrmaszyny,
       r.nruiglenia,
       r.wydzigla,
       r.waga,
       r.uwagipredkoscmaszyny,
       u1.user_nicename,
       u1.ID,
       u1.display_name 
    FROM jawe_wpdatatable_8 AS r
INNER JOIN jawe_users as u1 on u1.ID = r.uzytkownik

我 frogot,r.zmiana 的起始值是 NULL 我尝试了很多变体,但我得到的(在最好的情况下)是具有 NULL 值和名称的新列,它是整个 'CASE.....END' 代码。

如何获取此 CASE ... ENG 将 r.zmiana 中的值从 NULL 替换为 '1' 或 '2' 或 '3' ?

提前致谢。

---已编辑---

'Asgar' 是正确答案的那个。

是的,你是对的阿斯加。 但这部分有效(而不是'1'它给了我'3':))。 所以我将 BETWEEN 更改为 range ,它看起来像这样并且现在可以正常工作:

SELECT 
r.data, 
r.data1, 
r.godzina, 
CASE 
WHEN r.godzina >= '08:00:00' AND r.godzina <'16:00:00' THEN 1 
WHEN r.godzina >= '16:00:00' AND r.godzina <='23:59:99' THEN 2
WHEN r.godzina >= '00:00:00' AND r.godzina <'08:00:00' THEN 3
END, 
r.nrpartii, 
r.nazwadzianiny, 
r.nazwamaszyny, 
r.rzad, 
r.nrmaszyny, 
r.starynrmaszyny, 
r.nruiglenia, 
r.wydzigla, 
r.waga, 
r.uwagipredkoscmaszyny, 
u1.user_nicename, 
u1.ID, u1.display_name 
FROM jawe_wpdatatable_8 AS r 
INNER JOIN jawe_users as u1 on u1.ID = r.uzytkownik

我只有一个问题。 是的,它有效,但列名仍然是整个 CASE ... END 代码。 如何将其更改为“zmiana”有这种可能性吗?

似乎您的 CASE WHEN 语法错误。

CASE WHEN Query 的一个简单说明是:

SELECT
  CASE level
    WHEN 'A' THEN 'Beginner'
    WHEN 'B' THEN 'Junior'
    WHEN 'C' THEN 'Senior'
    ELSE 'Level doesn`t exist!'
  END AS experience_levels
FROM company;

因此,您的查询需要类似于:

SELECT r.data,
       r.data1,
       r.godzina,
       CASE 
        WHEN r.godzina BETWEEN '08:00:00' AND '15:59:99' THEN  1
        WHEN r.godzina BETWEEN '16:00:00' AND '23:59:99' THEN 2
        ELSE 3
       END as zmiana,
       r.nrpartii,
       r.nazwadzianiny,
       r.nazwamaszyny,
       r.rzad,
       r.nrmaszyny,
       r.starynrmaszyny,
       r.nruiglenia,
       r.wydzigla,
       r.waga,
       r.uwagipredkoscmaszyny,
       u1.user_nicename,
       u1.ID,
       u1.display_name 
    FROM jawe_wpdatatable_8 AS r
INNER JOIN jawe_users as u1 on u1.ID = r.uzytkownik

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM