Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL按时间戳筛选_Sql_Database_Postgresql_Timestamp - Fatal编程技术网

PostgreSQL按时间戳筛选

PostgreSQL按时间戳筛选,sql,database,postgresql,timestamp,Sql,Database,Postgresql,Timestamp,我有一个名为report的表,如下所示: 哪种类型的, 在这里,我试图通过order\u id和start\u picking\u hour更改行筛选。订单id没有问题。但是,当我按start\u picking\u hour进行筛选时,我无法实现任何目标 例如,以下代码起作用,SQL Manager说“2行受影响” 但是,我试图通过订单id和开始拣货时间进行过滤。我不确定如何按时间戳类型进行过滤。我尝试的下列查询都不起作用。每一个都返回一条消息“0行受影响” 在WHERE子句中,按time

我有一个名为
report
的表,如下所示:

哪种类型的,

在这里,我试图通过
order\u id
start\u picking\u hour
更改行筛选。订单id
没有问题。但是,当我按
start\u picking\u hour
进行筛选时,我无法实现任何目标

例如,以下代码起作用,SQL Manager说“2行受影响”

但是,我试图通过
订单id
开始拣货时间
进行过滤。我不确定如何按
时间戳类型进行过滤。我尝试的下列查询都不起作用。每一个都返回一条消息“0行受影响”


WHERE
子句中,按
timestamp
过滤的确切方式是什么?我正在使用PostgreSQL。

时间戳也包含小数秒(毫秒)。类似您正在使用的时间戳文本(
TO_timestamp('2/17/2015 10:12:51 AM','dd-mm-yyyy hh12:mi:ss')
)不包含毫秒

您可以使用
date\u trunc()
函数从时间戳值中“删除”毫秒(它们不是“删除的”-只是设置为零):

(与
相比,我更喜欢ANSI时间戳文本,而不是_timestamp()
,因为它们写起来更短、可移植且明确无误)

请注意,这将阻止在“开始时间”列上使用索引


如果不关心毫秒,可以将列定义为
timestamp(0)
。在这种情况下,将永远不会存储毫秒,您可以直接将该列与时间戳文本(不包含毫秒)进行比较。在这种情况下,可以使用该列上的索引。

此查询得到的结果是:选择*从报告中开始拾取时间=到时间戳('2/17/2015 10:12:51 AM','dd-mm-yyyy hh12:mi:ss');我得到了一个空结果
时间戳
还包含小数秒(时间戳文本没有小数秒)。不确定您的SQL客户端是否显示它们,但您可以尝试:
date\u trunc('second',start\u picking\u hour)=时间戳“2015-02-17 10:12:51”
,这将在
start\u picking\u hour
列中去掉毫秒。@a\u no\u名称的马\u这一个有效!非常感谢。如果您愿意,请写下答案,以便更好地阅读。您也可以使用“开始”和“开始”时间戳(“2015年2月17日10:12:51上午”和“dd-mm-yyyy hh12:mi:ss”)之间的时间戳(“2015年2月17日10:12:52上午”和“dd-mm-yyyy hh12:mi:ss”)
UPDATE report SET picked_count = 10 WHERE order_id = 168366
UPDATE report SET picked_count = 10 WHERE order_id = 168366 and
      start_picking_hour = TO_TIMESTAMP('2/17/2015 10:12:51 AM','dd-mm-yyyy hh12:mi:ss')

UPDATE report SET picked_count = 10 WHERE order_id = 168366 and
      start_picking_hour = TO_TIMESTAMP('2/17/2015 10:12:51','dd-mm-yyyy hh12:mi:ss')

UPDATE report SET picked_count = 10 WHERE order_id = 168366 and
      start_picking_hour = TO_TIMESTAMP('2/17/2015 10:12:51 AM','dd-mm-yyyy hh:mi:ss')

UPDATE report SET picked_count = 10 WHERE order_id = 168366 and
      start_picking_hour = TO_TIMESTAMP('2/17/2015 10:12:51','dd-mm-yyyy hh:mi:ss')

UPDATE report SET picked_count = 10 WHERE order_id = 168366 and
      start_picking_hour = '2/17/2015 10:12:51 AM'

UPDATE report SET picked_count = 10 WHERE order_id = 168366 and
      start_picking_hour = 2/17/2015 10:12:51 AM

UPDATE report SET picked_count = 10 WHERE order_id = 168366 and
      start_picking_hour = '2/17/2015 10:12:51'

UPDATE report SET picked_count = 10 WHERE order_id = 168366 and
      start_picking_hour = 2/17/2015 10:12:51
where date_trunc('second', start_picking_hour) = timestamp '2015-02-17 10:12:51'