2012-05-02 3 views
2

: 다른 날짜 (월/년)로 날짜 (월/년)을 비교하는 방법 인포믹스 DBMS 날짜 부분을 비교하는 방법

내가 다음 쿼리를 작성하지만 구문 오류 얻을 :

select id,name from h_history 
where (h_date::DATETIME YEAR TO MONTH >= 2/2012) 
    and (h_date::DATETIME YEAR TO MONTH <= 1/2013) 

년과 비교하고 싶습니다.

어떻게하는가요?

+1

너는이 것을 지나치게 생각할 수도 있습니다. 'h_date'는 datetime 필드입니까? – swasheck

+0

날짜 란은 –

답변

7

DATETIME 경로를 사용하려면 값을 올바르게 형식화해야합니다. 그것이, 당신은 서면으로 작성했습니다 :

select id,name from h_history 
where (h_date::DATETIME YEAR TO MONTH >= 2/2012) 
    and (h_date::DATETIME YEAR TO MONTH <= 1/2013) 

2/2012는 0에 해당하는 정수 부문이고, 그 반대의 경우도 마찬가지 날짜에 정수 나로부터 암시 적 캐스트가 없습니다.

당신은 쓸 수 : 자세한하지만 정확한입니다

-- Query 1 
SELECT id, name 
    FROM h_history 
WHERE (h_date::DATETIME YEAR TO MONTH >= DATETIME(2012-02) YEAR TO MONTH) 
    AND (h_date::DATETIME YEAR TO MONTH <= DATETIME(2013-01) YEAR TO MONTH) 

합니다. h_date는 DATE보다는 Y 형 TO 날짜 시간 X이기 때문에, 사용할 수있는 다른 옵션이 있습니다, 그러나

-- Query 2 
SELECT id, name 
    FROM h_history 
WHERE (h_date::DATETIME YEAR TO MONTH >= '2012-02') 
    AND (h_date::DATETIME YEAR TO MONTH <= '2013-01') 

: 당신은 짧은 컷을 사용할 수 있습니다. YEAR, MONTH, DAY 함수는 DATE에서 분명한 부분을 추출합니다 (DATETIME을 함수에 전달하면 DATETIME이 DATE로 강제 변환되어 처리됩니다). 유일한 로케일 독립적 인 DATE 생성자는 월, 일 및 연도의 3 가지 인수를 취하는 MDY 함수입니다. 모든 문자열 표시는 로켈에 따라 해석 될 수 있으므로 항상 모든 곳에서 작동하지는 않습니다.

는 또한 수행 할 수 있습니다

-- Query 3 
SELECT id, name 
    FROM h_history 
WHERE (h_date >= MDY(2, 1, 2012)) 
    AND (h_date <= MDY(1, 31, 2013)) 

또는 :

-- Query 4 
SELECT id, name 
    FROM h_history 
WHERE ((YEAR(h_date) = 2012 AND MONTH(h_date) >= 2) OR YEAR(h_date) >= 2013) 
    AND ((YEAR(h_date) = 2013 AND MONTH(h_date) <= 1) OR YEAR(h_date) < 2013) 

또는 : 선택을 감안할 때

-- Query 5 
SELECT id, name 
    FROM h_history 
WHERE (YEAR(h_date) * 100 + MONTH(h_date)) >= 201202 
    AND (YEAR(h_date) * 100 + MONTH(h_date)) <= 201301 

, 나는 아마 쿼리 2와 간결을 사용하십시오 정확하지만 쿼리 5 일 수도 있지만 모든 쿼리 1 ~ 5를 사용할 수 있습니다.

h_date이 DATETIME 유형의 열이고 DATETIME의 부분을 비교해야하는 경우, 조회 (조회 1에 표시된대로) 또는 EXTEND 기능을 사용할 수 있습니다. 그것은 장황한 경향이 있습니다.

+0

정말 고마워. –

+0

이 구문이'informix'와 함께 작동하기를 바랍니다. –

+2

오 예; 다른 DBMS라면 걱정할 것입니다.하지만 Informix에 대한 확신이 있습니다 (오타를 만들지 않은 경우). –

2

는 다음

SELECT 
    id,name 
FROM h_history 
WHERE 
    h_date >= MDY(2, 1, 2012) 
    AND h_date < MDY(2, 1, 2013) 
+0

달> 2, <1! 그것은 항상 내게 거짓을 준다. –

+0

그것은' swasheck

+0

@just_name 미안하다, 신경 쓰라라. – erikxiv

2

당신을 위해 왜하고자하지

SELECT 
     id 
    , name 
FROM h_history 
WHERE h_date >= '02/01/2012' and h_date <= '01/31/2013' 

일, h_date는 적절한 날짜 필드라고 가정 해보십시오?

0
select * from table t where MONTH(t.date) = 12 
+0

코드에 몇 가지 정보를 추가하십시오. – manniL

+0

예를 들어, 열의 날짜를 내 테이블 "사용자"에서 사용할 수 있습니다. 따라서 해당 날짜 열의 달만 비교하는 방법 –

관련 문제