1

我在表中有这样的情况:

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

1 回答 1

3

尝试类似:

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;
于 2013-08-12T09:50:48.457 回答