PSQL函数帮助 - 日期格式问题

时间:2016-05-16 23:09:45

标签: sql postgresql psql

试图清理别人在postgres中所做的一些功能。

有人知道以下内容吗?它工作正常,但日期格式在以'1999-09-07 16:30:00.000'开始进入时发生了变化

我不知道之前的格式是什么。

select 
case 
    when dbDate = '' then null
    when dbDate != '^\d.*' then dbDate::timestamp
    else '1900-01-01'::date + dbDate::int   
end as dbDate

每当我用它给我的日期来调用函数时

invalid input syntax for integer: "1999-09-07 16:30:00.000"

1 个答案:

答案 0 :(得分:2)

这个不错的功能是采用多种日期输入并对它们进行标准化。

我认为它期望以下之一:

  • 空白,让它为空
  • 以' MMM'开头的日期在日期格式中,不会通过' ^ \ d。*' (即不以数字开头的东西),它将作为日期投射
  • 一个数字

将日期作为INT投放的原因是因为在前两次测试失败后,写这篇文章的人期待 INT。他们想像Excel一样将整数添加到时间的开头(即1900-01-01)。

1999-09-07 16:30:00.000未通过第二次测试,即使它可以作为时间投射。

这会传递给else,而INT无法将其强制转换为1900-01-01,并会抛出错误。

在这种情况下,您需要更改第二次测试。使它成为允许你进入的日期时间的东西,但这会拒绝应该添加到1900-01-01的数字。

如果你不认为你的数字应该被添加到select case when dbDate = '' then null else dbDate::timestamp end as dbDate ,那么就去掉第三个测试并使用

writer.println("GET " + path + " " + protocol);
//writer.println();
writer.println("Host: " + hostname);
writer.println();
writer.flush();