2013-08-12 19 views
0

我在表這樣的情況:的PostgreSQL,獲得的最小和最大的日期從文本列

1 01.02.2011 
2 05.01.2011 
3 06.03.2012 
4 07.08.2011 
5 04.03.2013 
6 06.08.2011 
7 
8 02.02.2013 
9 04.06.2010 
10 10.10.2012 
11 04.04.2012 

其中第一列是ID(INT)和第二列是TEXT其中可以寫入格式日期「DD .mm.yyyy」。

我想獲得:
1)整個表格中輸入的最低日期和整個表格中的最高輸入日期。
2)最低進入2012年,最高輸入的日期日期2012年

最低和最高的日期在一年可能是相同的(如2010年)或字段可能是空的(如第7行)。

我打算使用TO_TIMESTAMP,但未成功。 例如:

SELECT (TO_TIMESTAMP(mydatetxt, 'DD.MM.YYYY')) 
FROM " & myTable & " 
ORDER BY (TO_TIMESTAMP(mydatetxt, 'DD.MM.YYYY')) ASC LIMIT 1 

此外與BETWEEN我沒有得到想要的結果。

如何寫這兩個查詢?

解決方案:
感謝您的所有建議。
伊戈爾的解決方案對我來說是最合適和最簡單的。

Dim sqlText As String = "SELECT min(to_date(nullif(mydate,''), 'DD.MM.YYYY')) FROM " & mytable 
cmd1 = New NpgsqlCommand(sqlText, conn) 
min = CDate(cmd1.ExecuteScalar()) 
If Not IsDate(min) Then 
    min = CType(CDate("01.01." & myyear) & " 00:00:00", Date) 
End If 
fromdate = CType(CDate(min), Date) 

sqlText = "SELECT max(to_date(mydate, 'DD.MM.YYYY')) FROM " & mytable 
cmd1 = New NpgsqlCommand(sqlText, conn) 
max = CDate(cmd1.ExecuteScalar()) 
If Not IsDate(max) Then 
    max = CType(CDate("31.12." & myyear) & " 23:59:59.9999", Date) 
End If 
todate = CType(CDate(max), Date) 
+0

你能告訴你的查詢,並告訴他們爲什麼不工作? –

+0

我使用示例查詢更新了您的請求中獲取最小日期的問題。我不知道爲什麼我的查詢不起作用。如果我知道,那麼不需要幫助。 –

+0

查詢如何「不工作」?任何錯誤消息?錯誤的結果?還有別的嗎? –

回答

2

嘗試類似:

SELECT max(to_date(nullif(mydatetxt,''), 'DD.MM.YYYY')), 
     min(to_date(nullif(mydatetxt,''), 'DD.MM.YYYY')) 
FROM table_name; 

SELECT max(to_date(nullif(mydatetxt,''), 'DD.MM.YYYY')), 
     min(to_date(nullif(mydatetxt,''), 'DD.MM.YYYY')) 
FROM table_name 
WHERE date_part('year',to_date(nullif(mydatetxt,''), 'DD.MM.YYYY')) = 2012; 
+0

這是最簡單和高度可用於我的情況。非常感謝。 –

相關問題