代码之家  ›  专栏  ›  技术社区  ›  Alin

knex postgres返回数字/十进制值的字符串

  •  6
  • Alin  · 技术社区  · 7 年前

    我有一张带列的桌子

    table.decimal('some_column', 30,15) numeric(30,15)

    当我运行 knex.raw('select some_column from some_table') 从node中,我在行中得到的响应如下所示:

    some_column: "5.000000000000000"
    some_column: "10.000000000000000"
    

    真正让我想到这一点的是,我做了一些像firstValue>最后,我得到了一个真正的响应,这让我认为这些是作为字符串而不是数字返回的。

    有什么方法可以推翻这种行为吗?

    2 回复  |  直到 7 年前
        1
  •  9
  •   Community CDub    5 年前

    解释原因和可能的解决方案

    检查这个很棒的答案 https://stackoverflow.com/a/39176670/7668448

    你会发现问题和可能的解决方案。

    请在此处检查我的答案: https://stackoverflow.com/a/57210469/7668448

    const typesBuiltins = {
        BOOL: 16,
        BYTEA: 17,
        CHAR: 18,
        INT8: 20,
        INT2: 21,
        INT4: 23,
        REGPROC: 24,
        TEXT: 25,
        OID: 26,
        TID: 27,
        XID: 28,
        CID: 29,
        JSON: 114,
        XML: 142,
        PG_NODE_TREE: 194,
        SMGR: 210,
        PATH: 602,
        POLYGON: 604,
        CIDR: 650,
        FLOAT4: 700,
        FLOAT8: 701,
        ABSTIME: 702,
        RELTIME: 703,
        TINTERVAL: 704,
        CIRCLE: 718,
        MACADDR8: 774,
        MONEY: 790,
        MACADDR: 829,
        INET: 869,
        ACLITEM: 1033,
        BPCHAR: 1042,
        VARCHAR: 1043,
        DATE: 1082,
        TIME: 1083,
        TIMESTAMP: 1114,
        TIMESTAMPTZ: 1184,
        INTERVAL: 1186,
        TIMETZ: 1266,
        BIT: 1560,
        VARBIT: 1562,
        NUMERIC: 1700,
        REFCURSOR: 1790,
        REGPROCEDURE: 2202,
        REGOPER: 2203,
        REGOPERATOR: 2204,
        REGCLASS: 2205,
        REGTYPE: 2206,
        UUID: 2950,
        TXID_SNAPSHOT: 2970,
        PG_LSN: 3220,
        PG_NDISTINCT: 3361,
        PG_DEPENDENCIES: 3402,
        TSVECTOR: 3614,
        TSQUERY: 3615,
        GTSVECTOR: 3642,
        REGCONFIG: 3734,
        REGDICTIONARY: 3769,
        JSONB: 3802,
        REGNAMESPACE: 4089,
        REGROLE: 4096
    };
    

    你可以在这里找到 https://github.com/brianc/node-pg-types/blob/master/lib/builtins.js

    使用示例:

    const pg = require('pg');
    
    pg.types.setTypeParser(pg.types.builtins.INT8, (value: string) => {
       return parseInt(value);
    });
    
    pg.types.setTypeParser(pg.types.builtins.FLOAT8, (value: string) => {
        return parseFloat(value);
    });
    
    pg.types.setTypeParser(pg.types.builtins.NUMERIC, (value: string) => {
        return parseFloat(value);
    });
    
        2
  •  3
  •   coockoo    7 年前

    你可以看看 pg-types 模块,由使用 pg knex ,并配置变量的解析

    var types = require('pg').types
    types.setTypeParser(<I DONT REMEMBER VAR NAME, NEED TO CHECK>, value => value === null ? null : +value)