2016-02-04 34 views
2

內使用我是比較新的Postgres的和正在使用的版本9.4。我在Java中有一個簡單的函數,如果我讓postgres去做,它會更有效率。我的功能需要一個整數以及來自數據庫,並改造他們。這一個字符串數據是我的功能:注意它需要一個整數和字符串Postgres的我怎麼可以創建一個函數的查詢

private static String difference(Integer i,String created_on) { 
    String id = ""; 
    if (i < 60) { 
     ... 
     } 
     else if (i >= 60 && i < 1440) { 

     .... 
    } 
else if (i >= 1440 && i < 10080) { 

     .... 

    } 
    else { 

     .... 
    } 

    return id; 
} 

這是我的查詢現在Created_on是String和last_reply是整數

"SELECT created_on as created_on, 
last_reply as last_reply; 

一旦數據來自於數據庫中,我把它放在一個循環,並通過這樣改造它:

for(i=0;i<10;i++) 
     { 
       jo = new JSONObject(); 
       jo.put("last_reply", difference(rs.getInt("last_reply", 
            rs.getString("created_on")))); 
      } 

正如你所看到的單向數據傳輸ormation發生在這裏

差異(rs.getInt( 「last_reply」, rs.getString( 「created_on」)

我現在的問題是我怎麼能複製該功能,並將其保存在Postgres裏,讓我可以做一個這樣的查詢

**

**"SELECT difference(last_reply,created_on) as newvalue, created_on as created_on, 
    last_reply as last_reply;** 

** 正如我知道,從性能角度看,最好是有數據庫做而不是循環使用Java的數據。任何建議將是巨大的......

更新

該功能用於社交應用程序,測量東西張貼在紀要方面的時間。如果是小於60分鐘,然後將返回類似「6分鐘前等等」,如果是60-1440之間,然後將返回「4個小時前等等。」 。我已經計算出了If-else語句中的計算結果,但沒有包含它,因此代碼看起來更具有代表性。

以下是完整的方法

private static String difference(Integer i,String created_on) { 
    String id = ""; 
    if (i < 60) { 

     if(i<1) 
      id = "Now"; 

     else 
      id = i + " min"; 
     } 
     else if (i >= 60 && i < 1440) { 

     i=(i/60); 
     if(i==0) 
     {i=1;} 
     id = i + " hrs"; 
    } else if (i >= 1440 && i < 10080) { 

     i=(i/1440); 
     id = i + " day(s)"; 

    } 
    else { 
    // Posted longer than 7 days so Created_On will show date created 
// Passed down to the id String 
     id = created_on; 

    } 

    return id; 
} 
+0

什麼是你的'差()'方法的邏輯是什麼?你只是顯示了很多無意義的'if'子句,'String'參數在任何地方都沒有使用。 – Kayaman

+0

它測量分鐘計的時間少於60是從60-1440返回小時加上數分鐘。我會更新它。 – user1949387

+0

什麼是'字符串created_on'嗎?如果你沒有在任何地方使用它,爲什麼你將它作爲參數傳遞?你的問題中有很多文字,但信息很少。 – Kayaman

回答

2

不知道什麼是數據類型爲Java差函數,但你可以做到這一點的兩種方法之一。拉動數據集到Java從Postgres的,並且由兩個值傳遞給你的函數找到的差異在那裏,然後使用該結果不管出於什麼目的設置。

另一種方式是在Postgres而言,要創建一個函數直接,然後CAL從你的查詢功能。

創建功能:使用功能在查詢

CREATE FUNCTION intDifference(integer, integer) RETURNS integer 
    AS 'select $2 - $1;' 
    LANGUAGE SQL 
    IMMUTABLE 
    RETURNS NULL ON NULL INPUT; 

SELECT intDifference(last_reply,created_on) as newvalue, created_on as created_on, last_reply as last_reply 
FROM SOME_TABLE; 
+1

非常感謝能夠從中得到它的工作 – user1949387

相關問題