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

Ali*_*lin 4 postgresql node.js knex.js

我有一个带列的表

table.decimal('some_column', 30,15) 在 postgres 上是 numeric(30,15)

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

some_column: "5.000000000000000"
some_column: "10.000000000000000"
Run Code Online (Sandbox Code Playgroud)

真正指出我这一点的是,我做了类似 firstValue>lastValue 之类的事情,我最终得到了一个真实的响应,这让我认为这些是作为字符串而不是数字返回的。

有什么方法可以覆盖这种行为?

Moh*_*lal 6

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

检查这个很好的答案/sf/answers/2742366931/

您了解问题和可能的解决方案。

pg 类型的使用

在这里查看我的答案: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
};
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到 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);
});
Run Code Online (Sandbox Code Playgroud)


coo*_*koo 5

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

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