PostgreSQL,从文本列获取最小和最大日期

时间:2013-08-12 09:35:07

标签: 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,我没有得到想要的结果。

如何编写这两个查询?

解:
感谢所有建议。
Igor的解决方案对我来说最合适也很简单。

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)

1 个答案:

答案 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;