programing

PostgreSQL CASE...여러 조건으로 종료

newsource 2023. 5. 25. 22:07

PostgreSQL CASE...여러 조건으로 종료

여기 내 표의 발췌본이 있습니다.

  gid    |    datepose    |    pvc
---------+----------------+------------
 1       |  1961          | 01
 2       |  1949          |
 3       |  1990          | 02
 1       |  1981          |
 1       |                | 03
 1       |                |

다음을 사용하여 PVC 열을 채우려고 합니다.SELECT CASE아래와 같이:

SELECT

 gid,

 CASE
  WHEN (pvc IS NULL OR pvc = '') AND datpose < 1980) THEN '01'
  WHEN (pvc IS NULL OR pvc = '') AND datpose >= 1980) THEN '02'
  WHEN (pvc IS NULL OR pvc = '') AND (datpose IS NULL OR datpose = 0) THEN '03'
 END AS pvc

FROM my_table ;

결과는 소스 테이블과 동일한 내용이며 아무 일도 일어나지 않았으며 pg_log 파일에 오류 메시지가 표시되지 않습니다.구문 오류일 수도 있고, WHEN 절 내에서 여러 조건을 사용하는 데 문제가 있을 수도 있습니다.

도움과 조언에 감사드립니다!

이런 종류의 코드는 아마도 당신에게 효과가 있을 것입니다.

SELECT
 *,
 CASE
  WHEN (pvc IS NULL OR pvc = '') AND (datepose < 1980) THEN '01'
  WHEN (pvc IS NULL OR pvc = '') AND (datepose >= 1980) THEN '02'
  WHEN (pvc IS NULL OR pvc = '') AND (datepose IS NULL OR datepose = 0) THEN '03'
  ELSE '00'
 END AS modifiedpvc
FROM my_table;


 gid | datepose | pvc | modifiedpvc 
-----+----------+-----+-------------
   1 |     1961 | 01  | 00
   2 |     1949 |     | 01
   3 |     1990 | 02  | 00
   1 |     1981 |     | 02
   1 |          | 03  | 00
   1 |          |     | 03
(6 rows)

매개 변수로 전달된 값 앞에 CAST를 수행하고 매개 변수 뒤에 VARCHAR(50)을 삽입해야 합니다. 예: WHEN(숫자는 NULL 또는 pvc = ') 및 (날짜 포즈 < 1980) 다음에 '01'을 VARCHAR(50)로 캐스트합니다.

언급URL : https://stackoverflow.com/questions/27800119/postgresql-case-end-with-multiple-conditions