Postgresql PostgresSQL。将时间戳转换为日期与在WHERE子句中显式定义整个时间戳的区别
我有一个包含两个WHERE子句版本的SQL查询: 第一个(显式时间戳): 结果行计数=15477 第二(演员扮演日期): 结果行计数=18679 创建的_at列包含没有时区的时间戳,格式为“2017-07-06 08:41:34.574686” 毫秒的长度介于5到6位之间Postgresql PostgresSQL。将时间戳转换为日期与在WHERE子句中显式定义整个时间戳的区别,postgresql,date,casting,where,Postgresql,Date,Casting,Where,我有一个包含两个WHERE子句版本的SQL查询: 第一个(显式时间戳): 结果行计数=15477 第二(演员扮演日期): 结果行计数=18679 创建的_at列包含没有时区的时间戳,格式为“2017-07-06 08:41:34.574686” 毫秒的长度介于5到6位之间 我意识到这可能是通过将时间戳转换为日期造成的,但如果有人能解释一下,我不明白为什么会发生这种情况。我是个白痴。。。第一个查询应该是和“2017-07-21 00:00:00.0”我是个白痴。。。当您使用现有的TimePSamp
我意识到这可能是通过将时间戳转换为日期造成的,但如果有人能解释一下,我不明白为什么会发生这种情况。我是个白痴。。。第一个查询应该是和“2017-07-21 00:00:00.0”我是个白痴。。。当您使用现有的TimePSamp时,第一个查询应该是和“2017-07-21 00:00:00.0”
BETWEEN '2017-07-06 00:00:00.0' AND '2017-07-20 00:00:00.0'
这意味着“2017-07-20 00:00:00.0”之后的所有事件(例如“2017-07-20 12:15:11”)都超出范围
您应该使用“2017-07-21 00:00:00.0”作为时间戳。当您使用现有的时间放大器时
BETWEEN '2017-07-06 00:00:00.0' AND '2017-07-20 00:00:00.0'
这意味着“2017-07-20 00:00:00.0”之后的所有事件(例如“2017-07-20 12:15:11”)都超出范围
您应该使用“2017-07-21 00:00:00.0”作为时间戳。答案已经给出,但我将尝试给出更详细的解释 假设您在列的
created\u中有一行的2017-07-20 12:34:56
在第二个查询中,从列值截断时间(小时、分钟等):
WHERE created_at::date ...
因此2017-07-20 12:34:56
转换为2017-07-20
和之间
条件满足('2017-07-20'答案已经给出,但我将尝试给出更详细的解释
假设您在
列的created\u中有一行的2017-07-20 12:34:56
在第二个查询中,从列值截断时间(小时、分钟等):
WHERE created_at::date ...
所以2017-07-20 12:34:56
转换为2017-07-20
和之间
条件满足('2017-07-20'谢谢:)我原本以为演员可能发生了一些奇怪的转换,然后我意识到了上述情况,我想我已经盯着SQL太久了。谢谢:)我原本以为在演员阵容中可能会发生一些奇怪的转换,然后我意识到了上述情况,我想我已经盯着SQL太久了。