2012-04-20 4 views
1

열이 isnull() 함수처럼 동작하는 값 0인지 확인하는 함수를 찾고 있습니다.mysql - 0 값을 확인하는 isnull()과 같은 함수

이것은 내가 지금까지있어 무엇 :

CONCAT(
    SUBSTRING_INDEX(
     SUBSTRING(textCol, 1, 
      LOCATE(DATE_FORMAT(dateCol,'%d.%m.%Y %H:%i'), textCol)-1), 
      '|', 
      -1),  
    SUBSTRING(
     textCol, 
     LOCATE(DATE_FORMAT(dateCol,'%d.%m.%Y %H:%i'), textCol), 
     IFNULL(
      LOCATE(/* this will return 0 if it's the last entry */ 
       '|', 
       textCol, 
       LOCATE(DATE_FORMAT(dateCol,'%d.%m.%Y %H:%i'), textCol) 
      ) - LOCATE(DATE_FORMAT(dateCol,'%d.%m.%Y %H:%i'), textCol), 
      LENGTH(textCol)))) 

textCol의 데이터 정렬의 각 열 안에 다른 CSV 파일과 CSV 파일과 같다. 각 데이터 집합은 |으로 구분되며 그 안의 각 데이터 집합은 &&으로 구분됩니다. 내부 필드는 이름, 날짜, '%d.%m.%Y %H:%i' 및 설명과 같습니다.

dateCol에있는 특정 DATETIME에 해당하는 데이터 세트를 추출하고 싶습니다. 문제는 내가 찾고있는 항목이 textCol의 마지막 항목 인 경우 LOCATE (주석 참조)이 0을 반환한다는 것입니다. 그러나 내 SUBSTRING이 깨져서 항목의 처음 부분 만 반환됩니다.

여기에 아무 것도하지 않는 ISNULL()을 추가했습니다. 내가 뭘하고 싶은건 ISNULL()과 비슷한 것을 가지고 있는데, Perl에서 || 연산자가 작동하는 것처럼 ISZERO()과 비슷합니다.

내가 원하는 것을 얻는 데 더 좋은 방법이있을 수 있습니다. 제발 저에게 말해 주십시요.

답변

3
SELECT CASE expression WHEN 0 THEN 'a substitute for zero' ELSE expression END 
FROM mytable 
+1

http://www.sqlfiddle.com/#!2/a291d/2 – Quassnoi

+0

당신을 감사합니다. 그게 효과가있다. 나는 이미''SELECT IF (표현식 = 0, '0 대신 대용, 표현식)''에 대해서 생각했다. 두 경우 모두 오히려 내 경우에는,하지만. – simbabque

8

이 짧고 반복 표현 방지 :

SELECT COALESCE(NULLIF(expression, 0), 'a substitute for zero') FROM mytable 
+0

NULLIF는 좋은 아이디어입니다. –