在postgres中将excel日期序列转换为日期

时间:2014-12-10 16:49:22

标签: excel postgresql date

所以我有大量的excel文件没有正确格式化,因此他们的日期不是作为日期读取的,而是作为他们使用的日期序列(i想想自1900-1-1以来的天数?)。例如:41917.0054050926真的是10/5/2014 12:07:47 AM。

我需要的只是实际日期,而不是时间。我知道我可以通过41917 / 365.25获得一年,四舍五入并将其添加到1900年,但我不确定如何获得当天和月份。有没有内置到postgres来处理这个?如果没有,有没有人知道找到日期和年份的算术方法?

谢谢!

5 个答案:

答案 0 :(得分:2)

我刚遇到这个问题,并编写了一个plpgsql函数来处理它。请注意,它仅适用于整数,这意味着它只会执行日期,而不是日期和时间。其他人可以随意扩展它。

CREATE OR REPLACE FUNCTION To_Timestamp_From_Excel (ExcelDate integer)
RETURNS timestamp without time zone AS $$
BEGIN
   IF ExcelDate > 59 THEN
    ExcelDate = ExcelDate - 1;
   END IF;
   RETURN date '1899-12-31' + ExcelDate;
END;
$$ LANGUAGE plpgsql;

如果你有日期和时间编码或你的字段类型是文本,你需要像这样调用它:

UPDATE myTable set MyDateField = to_Timestamp_From_Excel(MyDateField::integer)

答案 1 :(得分:0)

B1 中的 A1 中的数据输入:

=ROUND(A1,0)+1

并将 B1 格式化为 mm / dd / yyyy

例如:

enter image description here

答案 2 :(得分:0)

它有点凌乱而且不是100%准确,但我可以在自定义PG程序中这样做:

41917.0054050926 / 365.25获得年份

41917.0054050926%365.25获得一年中的某一天

然后我可以将一年中的某一天添加​​为前一年最后一天的间隔。

答案 3 :(得分:0)

我使用这样的指令: 选择时间戳“ 1899/12/30” +间隔“ 43404天43200” 获得'2018/10/30 12:00:00' 在Excel中,此日期为43404.5,那么我在间隔内的“天”之前有整数部分,并将分数乘以86400(每天的秒数)。

答案 4 :(得分:0)

尝试一下

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
</script>
<div class="menu">
  <ul>
    <li><a href="#">PureBasic</a></li>
    <li><a href="#">PureBasic Forum</a></li>
    <li><a href="#">PureArea</a></li>
    <li><a href="#">Wikipedia</a></li>
    <li><a href="#">Blank</a></li>
    <li><a href="#">Blank</a></li>       
    <li><a href="#">Blank</a></li>
    <li><a href="#">Blank</a></li>       
  </ul>
</div>
<div class="content"></div>