node.js
  • postgresql
  • date
  • knex.js
  • 2016-03-15 84 views 0 likes 
    0

    我有一個timestamp類型的列。我需要選擇給定日期的所有記錄。在SQL是這樣的:如何使用postgres :: date與knex.js

    select * from "table" where "date"::date = '2015-08-22'; 
    

    我嘗試以下操作:

    db('table').select().where('date::date', '=', date); 
    

    但由於knex地方引用了錯誤,這將引發錯誤

    error: select * from "table" where "date::date" = $1 - column "date::date" does not exist

    有什麼辦法可以執行這樣的查詢嗎?或者我應該使用whereRaw

    +0

    我希望列名'date'只是作爲一個例子。在實際的應用程序中使用這個列名是非常糟糕的。 –

    回答

    3

    對於像這樣的方言特定功能,您經常需要使用knex.raw。在這種情況下,你可以簡寫爲whereRaw

    db('table').select().where(knex.raw('??::date = ?', ['date', date])); 
    db('table').select().whereRaw('??::date = ?', ['date', date]); 
    
    2

    ::someType是使用標準cast(something as sometype)的postgres方式。你可以嘗試在你的框架中找到這個cast

    另一種選擇是使用date_trunc('day',date) = to_date('2015-08-22', 'YYYY-MM-DD')date_trunc('day',date) = '2015-08-22'

    +0

    如何在'knex.js'中實現這些函數? – kuanb

    0

    你得到逆轉型鑄造理念,因此這個問題:數據廣播將被應用到值,而不是列名。

    即改成這樣:

    select * from "table" where "date" = '2015-08-22'::date; 
    

    ,你仍然可以使用日期/時間功能上date列,如果你需要從中提取一部分,或匹配到另一種類型。

    +0

    你能否提供一個如何在'knex.js'中實現的例子? – kuanb

    +0

    @ kuanb對不起,我不使用knex,只有基於查詢的框架,如[pg-promise](https://github.com/vitaly-t/pg-promise)。 –

    相關問題