【问题标题】:Postgresql, comparing text as datetimePostgresql,将文本比较为日期时间
【发布时间】:2013-01-01 22:04:04
【问题描述】:

我有一个包含两列“文本”类型的表格,其中一列是格式为 10.03.2013 的日期。第二个是格式为 15:45:32 的时间。由于两者都是文本,我想知道 PostgreSQL 是否可以将这些字符串与 windows DateTime 值进行比较。

我尝试使用 BETWEEN() 获取记录,但没有得到任何结果。

"(mydate BETWEEN " & fromdate.Date.ToString & _
       " AND " & todate.Date.ToString & ") AND _
 (mytime BETWEEN " & fromdate.TimeOfDay.ToString & _
       " AND " & todate.TimeOfDay.ToString & ")"

mydate 和 mytime 是列,而 fromdate 和 to date 是 windows 日期时间类型。

有什么建议吗?

【问题讨论】:

  • 这应该是什么语言?为什么不首先从单独的日期+时间字段构造一个时间戳类型的值?
  • 这是 Visual Basic,我可以在其中制作字符串等命令。其次,因为数据已经存在。
  • 还是我理解错了?我可以从显示的数据和提及的数据类型(文本)构造时间戳吗?以及如何?
  • 不要将日期或时间戳存储为文本(或 varchar)。从长远来看,这会给你带来很多麻烦。始终使用正确的数据类型。
  • 什么是visual basic?视觉人士的基础:)

标签: postgresql


【解决方案1】:

将这些列转换为时间戳类型:

select ...
from ...
where
    to_timestamp(mydate || mytime, 'DD.MM.YYYYHH24:MI:SS') between
        '2012-01-20 10:23:12'
        and
        '2012-01-20 11:47:03'

【讨论】:

  • 无法正常工作。我错误地表示有问题的日期。这些日期的格式为 10.03.2013,没有最后一点。这可能是个问题吗?
  • @user973238 是的,这可能是个问题。我编辑了答案以适应日期格式。
  • @user973238 我的意思不是缺席,而是dd.mm.yyyy 格式。我首先猜到它是mm.dd.yyyy,就像在美国一样。但在你发表评论后,我看到你来自克罗地亚,所以它可能是 dd.mm.yyyy 就像在巴西一样。
  • 当然是科罗拉多,谢谢,在这种情况下,我会奋力前行。
  • 我终于明白了 :) PostgreSQL 太棒了!
猜你喜欢
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 2013-03-02
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多