【问题标题】:How to select rows only in specific years in `timestamp` fields如何仅在“时间戳”字段中选择特定年份的行
【发布时间】:2015-12-05 06:33:44
【问题描述】:

如何使用 postgresql 在 timestamp 字段中仅选择特定年份 (q1) 或年份和月份 (q2) 中的行

表格

CREATE TABLE IF NOT EXISTS "Article"(
"ArticleId" SERIAL NOT NULL,
"ReleaseDate" timestamp without time zone,
...

PRIMARY KEY ("ArticleId")
);

代码(使用 nodejs)

q1

var releaseDateY = [2015,1990];

// ??
// var query = 'SELECT * FROM "Article" WHERE "ReleaseDate" IN (';
// for (var i = 0; i < releaseDateY.length; i++) {
//   if (i > 0) {
//     query += ',';
//   }
//   query += '$' + (i + 1);
// }
// query += ')';

var params = releaseDateY;

q2

var releaseDateY = [2015,1990];
var releaseDateM = [1,3];

// ??
// var query = 'SELECT * FROM "Article" WHERE "ReleaseDate" IN (';
// for (var i = 0; i < releaseDateY.length; i++) {
//   if (i > 0) {
//     query += ',';
//   }
//   query += '$' + (i + 1);
// }
// query += ')';

// var ii = i;
// for (var i = 0; i < releaseDateM.length; i++) {
//   if (i > 0) {
//     query += ',';
//   }
//   query += '$' + (i + 1);
// }
// query += ')';

var params = [];
params.push(releaseDateY);
params.push(releaseDateM);
// params [2015,1990,1,3]

【问题讨论】:

  • where extract(year from releasedate) in (2012,2013,2014)
  • @a_horse_with_no_name 感谢您的回复,如果像 q2 一样需要选择年份和月份怎么做
  • extract(month from releasedate) = 1: postgresql.org/docs/current/static/…
  • @a_horse_with_no_name 像这样? WHERE extract(year from "ReleaseDate") IN (2012,2013) AND extract(month from "ReleaseDate") IN (1,12)
  • 它有效!谢谢!!

标签: node.js postgresql


【解决方案1】:

我知道可以使用 2 个函数:to_charextract

select to_char(now(), 'YYYY')
select extract(year from now())

但是如果你在 where 子句中使用它们,你可能会遇到问题。在这种情况下,您需要制作功能索引。尝试使用解释查看结果。

【讨论】:

    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多