简体   繁体   English

MySQL 替换 SELECT CASE 查询中的值

[英]MySQL replace values in SELECT CASE query

I have problem with CASE WHEN.我对 CASE WHEN 有疑问。

I wrote a query which works fine without CASE WHEN and it looks like:我写了一个没有 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

What I want to do is to change r.zmiana value to '1' or '2' or '3' depending on r.godzina我想要做的是根据 r.godzina 将 r.zmiana 值更改为“1”或“2”或“3”

I'm trying something like this:我正在尝试这样的事情:

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

I frogot, the begining value for r.zmiana is NULL I was trying many variations but all I get (in best case) is new column with NULL values and name which is whole 'CASE.....END' code.我 frogot,r.zmiana 的起始值是 NULL 我尝试了很多变体,但我得到的(在最好的情况下)是具有 NULL 值和名称的新列,它是整个 'CASE.....END' 代码。

How to get this CASE ... ENG replace (for display puposes only) values from NULL to '1' or '2' or '3' in r.zmiana ?如何获取此 CASE ... ENG 将 r.zmiana 中的值从 NULL 替换为 '1' 或 '2' 或 '3' ?

Thanks in advance.提前致谢。

---EDITED --- ---已编辑---

'Asgar' is the one with right answer. 'Asgar' 是正确答案的那个。

Yes You are right Asgar .是的,你是对的阿斯加。 But that works partly (instead of '1' it give me '3' :) ).但这部分有效(而不是'1'它给了我'3':))。 So I change BETWEEN to range and it looks like this and works fine now:所以我将 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

I have only one question.我只有一个问题。 Yes it works but the column name is stil whole CASE ... END code.是的,它有效,但列名仍然是整个 CASE ... END 代码。 how change it to 'zmiana' is there such possibility?如何将其更改为“zmiana”有这种可能性吗?

Seems like your CASE WHEN syntax is wrong.似乎您的 CASE WHEN 语法错误。

A simple illustration of CASE WHEN Query is: 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;

So your query needs to be somthing like:因此,您的查询需要类似于:

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