2012-05-02 318 views
2

如何比較最新的部分在Informix的數據庫管理系統:如何與另一日期(月/年)比較日期(月/年)

我寫了下面的查詢,但我得到一個語法錯誤:

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是日期時間字段嗎? – 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,而且也從整數datetime或反之亦然沒有隱式轉換。

你可以寫:

-- 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) 

這是冗長,但精確。你可以使用一個捷徑:

-- 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') 

然而,由於h_date是一個日期,而不是DATETIME X到Y型,還有其他的選擇。年,月,日的功能從DATE提取明顯的部位(和,如果傳遞一個DATETIME的功能,那麼DATETIME將被強制轉換爲日期,然後處理過的)。唯一完全與區域無關的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

假設h_date是一個適當的日期字段,爲什麼不

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

爲你工作?

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

請添加一些信息到你的代碼 – manniL

+0

例如列的日期是在我的表「用戶」提供這樣的辦法只能月份比較該日期列 –