it-source

MySQL CASE 구조

criticalcode 2023. 1. 3. 21:45
반응형

MySQL CASE 구조

SQL이CASE구문은 다음과 같습니다.

CASE
    WHEN search_condition THEN statement_list
    [WHEN search_condition THEN statement_list] ...
    [ELSE statement_list]
END CASE

하지만 이게 어떻게 작동되는지 이해가 안 돼요. 아마도 제가 이 문제를 생각하고 있기 때문인 것 같아요.if진술.

테이블에 필드가 있는 경우user_role예를 들어, "Manager", "Part Time" 등의 이름이 포함된 필드를 생성하려면 어떻게 해야 합니까?role_order역할에 따라 번호가 달라져요.이 예제의 경우 "user_role = 'Manager'이면 role_order = 5"입니다.

제가 찾는 사람은 물고기 잡는 법보다 물고기 잡는 법을 가르쳐야 한다는 걸 알아두세요.

CASE 스위치 문에 가깝습니다.사용할 수 있는 구문은 두 가지가 있습니다.첫 번째에서는 원하는 비교문을 사용할 수 있습니다.

CASE 
    WHEN user_role = 'Manager' then 4
    WHEN user_name = 'Tom' then 27
    WHEN columnA <> columnB then 99
    ELSE -1 --unknown
END

두 번째 스타일은 하나의 값만 조사하는 경우로, 조금 더 간결합니다.

CASE user_role
    WHEN 'Manager' then 4
    WHEN 'Part Time' then 7
    ELSE -1 --unknown
END

CASEMySQL에서는 문과모두 사용법이 조금씩 다릅니다.

성명서로서CASE는 스위치 문과 거의 동일하게 기능하며 위의 문서(링크)의 다음 예시와 같이 스토어드 프로시저에 도움이 됩니다.

DELIMITER |

CREATE PROCEDURE p()
  BEGIN
    DECLARE v INT DEFAULT 1;

    CASE v
      WHEN 2 THEN SELECT v;
      WHEN 3 THEN SELECT 0;
      ELSE
        BEGIN -- Do other stuff
        END;
    END CASE;
  END;
  |

단, 표현으로서 다음 절에서 사용할 수 있습니다.

SELECT *
  FROM employees
  ORDER BY
    CASE title
      WHEN "President" THEN 1
      WHEN "Manager" THEN 2
      ELSE 3
    END, surname

또한 스테이트먼트로서도 식으로서도 첫 번째 인수는 생략할 수 있습니다.WHEN조건을 붙여야 합니다.

SELECT *
  FROM employees
  ORDER BY
    CASE 
      WHEN title = "President" THEN 1
      WHEN title = "Manager" THEN 2
      ELSE 3
    END, surname

다른 답변에서는 을 언급하지 않았기 때문에 이 답변을 드렸습니다.CASE는 스테이트먼트로서도 표현으로서도 기능할 수 있습니다.이들 간의 주요 차이점은 진술서 양식이 다음과 같이 끝난다는 것이다.END CASE그리고 표현 형태는 단지END.

테이블이 필요 없는 케이스의 간단한 사용 예를 보고 싶었습니다.이 값은 홀수 또는 짝수 중 어느 쪽이 홀수인지 여부에 따라 짝수를 반환합니다.

SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;

언급URL : https://stackoverflow.com/questions/3389713/how-does-mysql-case-work

반응형