根据时间戳获取数据库中的数据

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 内置的 TIMESTAMPDATEDATETIME 字段。存储在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'

你也可以使用LTEQUALGT参数..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/…

以上是关于根据时间戳获取数据库中的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何根据来自firebase的时间戳获取排序数据[重复]

如何通过光标获取android中的时间戳列值?

根据雪花中的字段值获取每个日期和数据透视表的最后一个值

python 根据时间戳获取秒🐱

从 BigQuery 中的时间戳数据类型中获取每月前 3 个标签数量

如何编写SQL查询以基于时间戳从DB获取数据