V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nuistzhou
V2EX  ›  PostgreSQL

Postgres to_timestamp() 无法转换 unix epoch 字符串

  •  
  •   nuistzhou · 2020-10-04 18:09:04 +08:00 · 2210 次点击
    这是一个创建于 1271 天前的主题,其中的信息可能已经有所发展或是发生改变。

    表结构如下:

    create table item
    (
    	"ID" varchar not null,
    	"unixTime" varchar not null,
    );
    

    现在

    SELECT TO_TIMESTAMP("unixTime");
    

    就总是提示
    ERROR: function to_timestamp(character varying) does not exist Hint: No function matches the given name and argument types. You might need to add explicit type casts.

    但随手试了几个值都没啥问题,比如:
    select to_timestamp('1358121600');
    select to_timestamp('969408000');

    初步怀疑表里有不同 format 的 timestamp 的值,然后 to_timestamp()不能根据不同的 format 自动智能转换?
    有没有大佬可以启发下,看这样的情况怎么解决,急急急~谢谢谢谢

    hooopo
        1
    hooopo  
       2020-10-04 18:12:51 +08:00 via Android
    SELECT TO_TIMESTAMP(unixTime);
    nuistzhou
        2
    nuistzhou  
    OP
       2020-10-04 18:19:31 +08:00
    @hooopo 这个不是问题啦,postgres 里字段名有大写的话要加双引号的~
    hooopo
        3
    hooopo  
       2020-10-04 18:25:31 +08:00 via Android
    很简单啊 先用 limit 1 测试下是不是数据问题 数据问题就修数据
    nuistzhou
        4
    nuistzhou  
    OP
       2020-10-04 18:29:54 +08:00
    @hooopo Limit 1 也报错,而且 80M 条数据,没法测呀,我倒是想有个函数可以把这些 invalid 的数据排除出去。。。
    hooopo
        5
    hooopo  
       2020-10-04 18:31:49 +08:00 via Android
    一个正则就行啊
    MoYi123
        6
    MoYi123  
       2020-10-04 18:32:17 +08:00   ❤️ 1
    select TO_TIMESTAMP("unixTime"::int) from item;
    nuistzhou
        7
    nuistzhou  
    OP
       2020-10-04 18:55:12 +08:00
    @MoYi123 完美!!感谢感谢老哥
    sagaxu
        8
    sagaxu  
       2020-10-04 19:24:07 +08:00 via Android
    不能查一下手册看看这个函数的定义?
    sfqtsh
        9
    sfqtsh  
       2020-10-04 19:40:10 +08:00 via Android
    \df to_timestamp

    你看有 character varying 参数的吗?

    显然没有!
    nuistzhou
        10
    nuistzhou  
    OP
       2020-10-04 19:51:29 +08:00 via iPhone
    @sfqtsh 有支持 string 啊
    sfqtsh
        11
    sfqtsh  
       2020-10-04 20:13:26 +08:00 via Android   ❤️ 1
    @nuistzhou 那是 format function 一种,且有两个参数。

    to_timestamp ( text, text ) → timestamp with time zone

    Converts string to time stamp according to the given format. (See also to_timestamp(double precision) in Table 9.32.)

    to_timestamp('05 Dec 2000', 'DD Mon YYYY') → 2000-12-05 00:00:00-05
    nuistzhou
        12
    nuistzhou  
    OP
       2020-10-04 20:29:27 +08:00
    @sfqtsh 哦,你说的对。
    我需要的其实是这个:
    ```
    to_timestamp ( double precision ) → timestamp with time zone

    Convert Unix epoch (seconds since 1970-01-01 00:00:00+00) to timestamp with time zone

    to_timestamp(1284352323) → 2010-09-13 04:32:03+00
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   956 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:37 · PVG 05:37 · LAX 14:37 · JFK 17:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.