postgresql - TypeORM: როგორ გავძიოთ თარიღის დიაპაზონი PostgresSQL-ში?


მივიღოთ ISO8601 თარიღი და გვინდა გავაკეთოთ კითხვის განხორციელება Typeorm და PostgreSQL გამოყენებით

 if (orderInput.begining && orderInput.ending)
     query.andWhere(`order.createdAt
     BETWEEN to_timestamp(${orderInput.begining} / 1000 )
     AND to_timestamp(${orderInput.ending} / 1000 );
`);

ესენი ჩემი არგუმენტებია: "2010-12-24T21:32:33.477Z" "2019-12-24T21:32:33.477Z" და ეს არის შენახული კითხვის პროცესი და შეცდომა:

query failed: SELECT DISTINCT "distinctAlias"."order_id" as "ids_order_id" FROM (SELECT "order"."id" AS "order_id", "order"."createdAt" AS "order_createdAt"
 FROM "order" "order" INNER JOIN "ware" "ware" ON "ware"."id"="order"."wareId" WHERE "order"."organizationId" = $1 AND "order"."createdAt"
                 BETWEEN Wed Dec 25 2019 01:02:33 GMT+0330 (Iran Standard Time) 
                 AND Wed Dec 25 2019 01:02:33 GMT+0330 (Iran Standard Time) ;) "distinctAlias" ORDER BY "order_id" ASC LIMIT 25 -- PARAMETERS: ["8fd87ced-eb58-4460-b74e-d5a2b1491622"]
error: { error: syntax error at or near "Dec"

ვარაუდობ, რომ ეს იმიტომაა, რომ არგუმენტები არ არის ჩასმული ' ' (ციტატებში). არ ვიცი, როგორ გავაწოდო არგუმენტები TypeScript-ს სტანდარტული ISO8606 Date (TypeScript) ფორმატში ' ' (ციტატებში), რათა შემდეგ გადაეცეს PostgreSQL-ს.

პასუხი #1

ჩემი გადაწყვეტილება ამჟამად (2021-05-26) TypeORM-ის Between-ის გამოყენებით (დოკუმენტაციები):

const orders = await this.orderRepo.find({
  where: {
    createdAt: Between(
      new Date(orderInput.begining).toISOString(),
      new Date(orderInput.ending)).toISOString(),
    ),
  },
  skip: skip || 0,
  take: take || 10,
});

პასუხი #2

უწყვეტად Typescript და PostgreSQL კარგად იციან ISO8601 და PostgreSQL-ისთვის to_timestamp()-ის გამოყენება საჭირო არ არის. ასე რომ, ეს მუშაობს როგორც ჯადოსნურად:

if (orderInput.begining && orderInput.ending)
    query.andWhere(
       `"order"."createdAt"
    BETWEEN :begin
       AND :end`
    ,{ begin: orderInput.begining, end: orderInput.ending);

შენიშვნა: JavaScript-ში, თქვენ შეგიძლიათ მარტივად შექმნათ ISO8601 სტანდარტის თარიღი ამ გზით:

const date = new Date(2020,2,2)
const iso  = date.toISOString()