MAX函数返回意外结果

时间:2017-10-13 06:18:53

标签: sql postgresql time max

我正在使用此查询,结果不符合预期:

select max(time_taken) 
from abc 
where id='13' 
  and tdy_date='2017-10-13'

结果:

9:53

但实际结果应该是10:03。 time_taken的数据类型为character varying,格式为00:00。

2 个答案:

答案 0 :(得分:2)

您应该使用数据类型作为日期时间,但是您可以使用此查询获得所需结果的时间

select max(time_taken::time) as max from abc where student_id='13' and tdy_date='2017-10-13';

答案 1 :(得分:-1)

因为time_taken列中的所有值都是00:00格式,并且只要它们是24小时表示法(即00:00到23:59),所以改变数据类型没有问题对于TIME的列,只需执行以下代码行:

 ALTER TABLE abc ALTER COLUMN time_taken TIME

这样,当您选择Max time_taken时,SQL Server可以正确地确定值的优先级。所以:

SELECT MAX(LEFT(time_taken,5))
FROM abc
WHERE id='13'
AND tdy_date='2017-10-13'

现在应该给:10:03。

它会给出10:03:00.0000000,但我使用LEFT函数只选择字符串左侧的前五个字符。