1

这是我的数据库表结构

CREATE TABLE IF NOT EXISTS `db_table` (
  `start_date` date NOT NULL COMMENT 'Year-Month-Day',
  `username` varchar(15) NOT NULL,
  PRIMARY KEY (`start_date`,`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

PHP

$q_date = '2013-02-24 01:00:00';
$t_time = date('H:i:s',time());  //Output = 05:42:37   Hours:Minutes:Seconds

SQL查询

SELECT username WHERE UNIX_TIMESTAMP(start_date) >= '".strtotime($q_date)."'

如您所见.. start_date 列的类型是日期,如“年月日”,我需要使用 UNIX_TIMESTAMP 和日期时间,如 (start_date $t_time) 所以它就像 UNIX_TIMESTAMP(2013-04-24 05:42: 37)

那可能吗 ?请问有什么想法吗?

谢谢你。

4

2 回答 2

1

您已经提到了数据库,但我认为它是 mysql。

您说“如您所见.. start_date 列的类型是日期,如“年-月-日”” - 但您的 start_date 是 mysql 日期格式的日期。转换是选择数据的问题。当然,您可以将 start_date 设计为 varchar(字符串),然后您就可以放置您喜欢的任何日期格式。但在此日期之前,您需要将选择中的日期转换为 unix 时间戳。与 unix 时间戳之间的示例转换。

select now(), unix_timestamp(now()),  from_unixtime(unix_timestamp(now())),
       unix_timestamp('2013-07-09 09:04:30'), from_unixtime(1373353795)

给你

2013-07-09 09:10:15, 1373353815, 2013-07-09 09:10:15, 
1373353470, 2013-07-09 09:09:55

我不熟悉 php,也不知道 strtotime 是什么格式,但返回的应该与 now() 返回相同(我可以有其他语言环境,您的格式可以不同,但​​您始终可以根据需要格式化时间戳

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime

我的建议是进行一次转换并始终使用时间戳 - 更快:

SELECT username WHERE start_date >= some_php_conversion_which_produces_unix_timestamp.
于 2013-07-09T07:15:46.910 回答
1

将 DATE 类型转换为 DATETIME 确实是不可能的,因为如果您的数据库表的列在 DATE 中,那么当您在表中插入数据时,它不会向您的数据库插入时间。因此使用任何 SQL 函数都将无法找到实际信息。你会得到一个错误的输出。

因此,为了获得正确的输出,如果可能,请将您的字段类型更改为 DATETIME。我认为这将是最好的解决方案。

于 2013-07-09T07:29:46.330 回答