【发布时间】:2013-06-04 18:00:06
【问题描述】:
我正在开发一个使用 PHP 和 PostgreSQL 作为数据库的考勤应用程序。
这是我的桌子:
- ID - 整数,PK
- 名称 - 字符不同 (50)
- 及时无时区
- 超时 - 没有时区的时间
基本上,我想检查指定时间内有多少人。 例如,如果输入的是 08:00,那么所有在 08:00 之前签到和在 08:00 之后签退的人都会被计算在内。
我遇到的问题是当Out
SELECT COUNT(*) FROM(
SELECT tbl_1."ID" FROM attendance as tbl_1 WHERE "In" < "Out" AND "In" < '$input' AND "Out" > '$input'
UNION
SELECT tbl_2."ID" FROM attendance as tbl_2 WHERE "Out" < "In" AND "In" < '$input2' AND "Out" > '$input'
) AS tmp_tbl
$input 是一个 PHP 变量,用于存储输入数据(字符串)。 $input2 是一个 PHP 变量,存储输入数据 +24 小时(我替换了前两个字符)。
但不幸的是,我遇到了另一个问题 - PostgreSQL 无法将时间与值 >24:00 进行比较。
查询失败:错误:日期/时间字段值超出范围:“35:11:00”
除了为 DateIn 和 DateOut 添加其他列之外,谁能帮我解决这个问题? 存储有关日期的信息?
对不起我的英语。
【问题讨论】:
-
您的 $input 似乎有问题。
-
您是否要求
in和out的类型为time?是否可以选择使用timestamp,从而将日期信息添加到您的值中?我希望这比使用纯time值的任何解决方法都好。 -
@Thilo 你能给我一些使用时间戳进行时间比较的例子吗?我不能让输入存储固定日期。我需要 - 比方说 - 将输入与整个表格进行比较。
-
避免使用
time数据类型。出于这个原因,这是一种痛苦。存储timestamp with time zone获取真实世界时间,或存储interval获取时差。
标签: postgresql time-and-attendance