我已经构建了一个小应用程序,它具有用户管理,用于输入数据的前端控制台和用于控制前端部分的后端控制台。前端向MySQL数据库添加了时间戳的行。后端需要能够在X和Y日期之间从数据库中选择行。
到目前为止,一切都有效,除了我真正在努力的日期部分。
前端SQL输入如下所示(删除了伪代码后简化):
$date = time();
$top_level_category = $_POST['top_level_category'];
$sub_level_category = $_POST['sub_level_category'];
$company = $_POST['company'];
$agent_name = $_POST['agent_name'];
$ticket_id = $_POST['ticket_id'];
$sql = "INSERT INTO dacc_data ("
. "id, top_level_category, sub_level_category, "
. "agent_name, date, ticket_id, company"
. ") VALUES ("
. "NULL, '$top_level_category', '$sub_level_category', "
. "'$agent_name', FROM_UNIXTIME('$date'), '$ticket_id', '$company'"
. ")"
;
$result = mysql_query($sql) or die (mysql_error());
这似乎工作正常,时间戳被选中并添加到我的表中的DATETIME列。它在数据库中显示为dd / mm / yyyy hh:mm:ss。
所以......我的第一个问题是 - 这是正确的方法吗?
第二个问题是,我需要在X和Y日期之间提取哪一行SQL语句。
道歉,如果这是漫无目的,希望它很清楚,但如果您需要更多信息,请告诉我。
答案 0 :(得分:6)
MySQL日期时间应使用短划线格式化:
YYYY-MM-DD HH:MM:SS
http://dev.mysql.com/doc/refman/5.0/en/datetime.html
然后您可以通过以下几种方式查询日期范围:
select *
from table
where date >= '[start date]' and date <= '[end date]';
或
select *
from table
where date between '[start date]' and '[end date]';
其中“table”是数据库表的名称,“date”是日期时间字段的名称。
答案 1 :(得分:0)
你是对的。我可以确认数据库有“YYYY-MM-DD HH:MM:SS” - 我正在使用SQLWave编辑器快速浏览数据库,它会自动格式化DATETIME列。
// Initial questions still stand :)
或者不是,只是注意到你更新了答案 - 非常感谢你!我实际上尝试了几次相同的查询无济于事,主要是因为我的WHERE错误地指定了日期格式。被SQLWave误导:(
从现在开始回到使用命令行!!!
答案 2 :(得分:0)
“我需要在X和Y日期之间提取哪一行SQL语句?”
SELECT * FROM `dacc_data` where `date` between "2008-11-01" and "2008-12-01"