昨天在postrgesql中的记录

Kro*_*yle 42 postgresql

我有一个应用程序,我使用MySQL.我的报告延长了过去24小时的记录.我使用了查询:

WHERE (DATE_SUB(CURDATE(), INTERVAL 1 DAY) <= FROM_UNIXTIME(`workorder`.`CREATEDTIME` / 1000))
Run Code Online (Sandbox Code Playgroud)

现在我必须使用PostgreSQL并且不知道如何报告过去24小时.你们有人可以帮忙吗?

Cur*_*urt 68

WHERE workorder.createdtime > current_date - 1     -- Yesterday and today

WHERE workorder.createdtime > current_timestamp - interval '1 day' -- last 24hr
Run Code Online (Sandbox Code Playgroud)

  • @Krokodyle这个错误意味着你的`workorder.createdtime`是一个`bigint`。您需要将其转换为正确的“日期”或“时间戳”。 (2认同)
  • 这将采取昨天之后的所有项目。不仅仅是今天和昨天。 (2认同)

Bas*_*que 30

> TIMESTAMP 'yesterday'

为方便起见,Postgres包含一些硬编码值作为特殊的日期/时间输入.他们包括:

  • yesterday
  • today
  • tomorrow
  • now

试试SELECT TIMESTAMP 'now'.

例如,这是一个查询.

SELECT when_row_created_
FROM customer_
WHERE when_row_created_ > TIMESTAMP 'yesterday' 
ORDER BY when_row_created_ DESC
;
Run Code Online (Sandbox Code Playgroud)

这些命令可能不适合生产代码,但它们在开发中肯定很方便.阅读文档并进行一些练习,以确保您了解这些命令的行为,会话的时区如何影响它们等等.

缺点包括(a)隐含地忽略了时区的关键问题,(b)不是标准的SQL.

  • @VillasV 一方面,它忽略了时区的关键问题。隐式取决于会话的当前时区。最好在代码中明确并指定时区。 (2认同)

Rom*_*kar 6

where workorder.createdtime >= now() - interval '24 hour' 
Run Code Online (Sandbox Code Playgroud)

  • 使用SQL标准的"current_date"关键字而不是"now"通常会更好. (3认同)