根据时间戳获取数据库中的数据
Posted
技术标签:
【中文标题】根据时间戳获取数据库中的数据【英文标题】:getting data in database based on timestamp 【发布时间】:2020-03-07 10:32:45 【问题描述】:我正在使用这种格式的时间戳
date_default_timezone_set('Asia/Manila');
$date= date('F d, Y');
$time= date('h:i:s A');
它会像这样保存数据
November 5, 2019 12:46:03 AM
现在,我想获取并回显每月数据、每周数据和每年数据。
我尝试使用 LIKE '$date%',但在每周时我无法让它工作。
在这个日期的情况下,我想获取 2019 年 11 月 5 日和之前六天(一周)的数据 我通过将其保存在另一列中并在 where 语句中使用它来解决每月和每年的问题,但我不知道如何在获取每周数据时做到这一点
【问题讨论】:
对不起,我觉得这个问题还是有点含糊。您能否更清楚地说明您在寻找什么?您正在使用的数据在哪里?这对你有帮助吗? ***.com/questions/8544438/… 为了做到这一点,您应该使用 mysql 内置的TIMESTAMP
、DATE
或 DATETIME
字段。存储在VARCHAR
中非常困难。你应该存储它的格式是yyyy-mm-dd hh:mm:ss
——此时你可以使用像WHERE my_date_field > 2014
等等这样的查询..或者WHERE my_filed BETWEEN
..使查询更容易..相反,如果你需要一个人类可读的格式,只需在varchar
中向数据库添加一个字段,这样您就有了 MySQL 格式和字符串格式。
你使用的是timestamp
吗?听起来您的数据库中有纯文本,这是不推荐的。使用timestamp
看看DAYOFWEEK()
@Zak 你能提供代码吗,这基本上是我的教授教我们的,所以我没有太多工作要做
【参考方案1】:
您似乎将日期存储为字符串。只是不要。如果您有日期,请使用相关数据类型将它们存储在您的数据库中:在 MySQL 中,您需要 datetime
数据类型。
在 php 中,您可以使用格式说明符 'Y-m-d H:i:s'
生成正确的 MySQL 日期时间。
有了这个设置,很容易应用你正在寻找的过滤器:
mydate >= '2019-11-05' - interval 6 day and mydate <= '2019-11-05'
【讨论】:
我将它以 VARCHAR 形式保存在我的数据库中,然后使用 VALUE(..,'$date $time',...) 将其插入数据库中 @Remaster:就像我说的,别这样。改为创建datetime
列,使用date('Y-m-d H:i:s')
之类的php 表达式生成正确的MySQL 日期,然后将其插入数据库。
我应该在我的语句中使用“mydate”还是我的数据库表的列名?
mydate
代表你的datetime
列的名称,你可以用该列的真实名称替换它。
欢迎@Remaster!很高兴它有帮助。【参考方案2】:
根据我上面的 cmets .. 我正在用一个例子来回答你的请求 ..
我已经创建了一个基本的表格和插入语句供您使用..
CREATE TABLE `your_db`.`times` (
`id` INT NOT NULL AUTO_INCREMENT,
`mysql_timestamp` TIMESTAMP NULL,
`hr_timestamp` VARCHAR(45) NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC));
插入一些样本数据:
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2018-10-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2018-11-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2018-12-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-01-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-02-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-03-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-04-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-04-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-05-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-06-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-07-07 11:58:46', 'IE Oct 7, 2018');
INSERT INTO `your_db`.`times` (`mysql_timestamp`, `hr_timestamp`) VALUES ('2019-08-07 11:58:46', 'IE Oct 7, 2018');
按YEAR获取数据的示例如下:
SELECT * FROM your_db.times WHERE YEAR(mysql_timestamp) = 2018;
选择特定MONTH的示例:
SELECT * FROM your_db.times WHERE MONTH(mysql_timestamp) = 04;
选择BETWEEN
日期的示例:
SELECT * FROM your_db.times WHERE mysql_timestamp BETWEEN '2018-12-01 00:00:00' AND '2019-04-30 00:00:00'
你也可以使用LT
EQUAL
和GT
参数..IE:
SELECT * FROM your_db.times WHERE mysql_timestamp > '2018-12-01 00:00:00'
SELECT * FROM your_db.times WHERE mysql_timestamp <= '2018-12-01 00:00:00'
【讨论】:
谢谢你,我会用它来了解更多。另一个答案解决了我的问题,但我赞成你。谢谢你UUU【参考方案3】:您必须将保存的日期时间转换为日期,并使用它来添加天数和映射
SELECT STR_TO_DATE("November 5, 2019 12:46:03 AM","%M %e, %Y %h:%i:%s %p") - INTERVAL 6 DAY;
给你作为结果 2019-10-30 00:46:03
你要做的就是终于
WHERE STR_TO_DATE("November 5, 2019 12:46:03 AM","%M %e, %Y %h:%i:%s %p")
< NOW() - INTERVAL 6 DAY
【讨论】:
我根据你给我的内容使用了这个 sql 语句 "SELECT * FROM sales WHERE STR_TO_DATE("November 5, 2019 12:46:03 AM","%M %e, %Y %h :%i:%s %p") 当然这很好用,请参阅dbfiddle.uk/…以上是关于根据时间戳获取数据库中的数据的主要内容,如果未能解决你的问题,请参考以下文章