在 odbc 数据库中按 DATE 查询选择数据
Posted
技术标签:
【中文标题】在 odbc 数据库中按 DATE 查询选择数据【英文标题】:Query for select data by DATE in odbc database 【发布时间】:2012-06-14 06:32:00 【问题描述】:谁能告诉我如何使用 php 在 MS.ACCESS 数据库中按日期选择数据? 例如,我正在尝试使用通配符 (absent = 14/06/2012*) 选择数据 (absent = 14/06/2012 13:00:00)
这是我的查询
$sql = "SELECT TOP 1 * FROM absent WHERE id = $id AND absent LIKE '#14/06/2012#'"
$result = odbc_exec($connect, $sql);
缺席字段具有日期(一般日期)类型。而 id = 自动编号。
我没有得到任何结果,使用那个查询。我的错在哪里?
已经在尝试了
absent = #14/06/2012#
absent = '14/06/2012*'
但没有成功。
编辑 好吧,我成功了,但没有使用通配符。这是我的解决方案,我使用范围日期来限制搜索
WHERE absent >= #14/06/2012 AND absent < #15/06/2012#;
该死的女士访问!
【问题讨论】:
absent 是 DATE 格式吗? @ElzoValugi 是的,缺席是 DATE 格式,我的问题是,如何使用 PHP 通配符按日期选择数据?你能帮助我吗?我被卡住了,已经尝试了所有的可能性。 当日 WHERE absent between #2012/06/14# AND #2012/06/15#; 【参考方案1】:当您通过 ODBC 查询 MS Access 中的日期时间字段时,ODBC 驱动程序会将其转换为时间戳,例如:
select * from table where col=#2012-06-15#
这将转换为 ts '2012-06-15 00:00:00',因此您只会获得该值为 true 的匹配项。
您使用范围的答案更好,但是您应该真正使用:-
select * from table where col>d '2012-06-15' and col<d '2012-06-16'
使用d 'yyyy-mm-dd'
的 ODBC 格式意味着您的代码可以移植到大多数其他 ODBC 驱动程序,而不仅仅是 MS Access。
【讨论】:
我正在查询一个 dbase III 文件并使用 d 'yyyy-mm-dd' 对我有用。尝试 #yyyy-mm-dd# 会导致错误消息指出我缺少操作数。 这个小花絮:d '2012-06-15' 【参考方案2】:您已包含两种类型的分隔符,字符串和日期。 MS Access 中的查询将是:
$sql = "SELECT TOP 1 * FROM absent WHERE id = $id AND absent = #2012/06/14#"
最好使用年月日格式,因为这样可以避免与语言环境格式产生矛盾。
【讨论】:
【参考方案3】:我无法尝试我的答案,因为我没有可用的 php,但这里有一些想法 (假设 Absent 是一个 Date 字段)。
LIKE 进行字符串比较,因此在使用 LIKE 时我不会包含 #。 出于同样的原因,您绝对应该包含引号'
或 "
否则您将得到除法
这是所有美国产品,所以我会尝试 mm/dd/yyyy 格式的日期
因此我的猜测是absent LIKE '06/04/2012*'
其他 - 可能效率较低,但更安全 - 标准可能是:
...AND day(absent) = 14 AND month(absent) = 6 AND year(absent) = 2012
或
... AND Format(Absent, "dd\/mm\/yyyy") = "14/06/2012"
祝你好运
【讨论】:
以上是关于在 odbc 数据库中按 DATE 查询选择数据的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 直通查询 - 使用 ODBC 连接字符串时非常慢,手动选择数据源时速度快 - 问题出在哪里