如何比较Postgres中小的两个时间和选择时间

时间:2019-04-27 16:23:09

标签: sql postgresql

我有一个问题。我有两个时间:time01:11:00和time02:11.02。因为它是由用户输入的,所以我不知道time01小还是time02小。 示例:我有预订,并且在用户输入时看起来像:

Insert into table01("time01,"time02") values ("11:01",11:02)

我想使用postgres sql create funtion(“或sql ...)从用户获取数据并进行比较。我希望选择时间短,然后我从time01和time02得到时间小,然后做点什么。我该怎么办努力吧。

2 个答案:

答案 0 :(得分:0)

很难理解您的问题,但是我相信您可能希望按顺序存储时间,即使用户没有正确输入?然后,您可以使用least()greatest()。第一个返回最大的参数,第二个返回最大的参数。因此,您可以这样做:

INSERT INTO table01
            (time01,
             time02)
            VALUES (least('11:01',
                          '11:02'),
                    greatest('11:01',
                             '11:02'));

编辑:

如果您只想保存较小的一次,请使用least()并将其保存在所需的位置。假设目标是表milestone中的列milestones

INSERT INTO milestones
            (milestone)
            VALUES (least('11:01',
                          '11:02'));               

答案 1 :(得分:0)

最简单的方法可能只是创建一个视图或查询以按照想要的顺序获取值:

select least(time1, time2) as time_first,
       greatest(time1, time2) as time_second
from table01;

如果您希望用户只能以正确的顺序输入时间,请使用检查约束:

alter table table01 add constraint chk_table01_time1_time2
    check (time1 < time2);

这将拒绝乱序输入。

最后,如果您希望两次按正确的顺序而不管它们被提供给表的顺序,请使用触发器。