MySQL 时间类型timestamp筛选问题

Laravel MySQL 时间查询问题

  1. Laravel 版本:7.30.6
  2. MySQL 版本:8.0.29-0ubuntu0.20.04.3 for Linux on x86_64
  3. Navcat 版本:Navicat Premium 15

在做一个商城 后台管理的时 偶然间发现订单查询不全(本身就两条数据 却只显示一条)遂记录一下
订单表 查询字段 :created_at 类型 timestamp

laravel 框架中 查询方式:

$GoodIndent = GoodIndent::whereRaw('now()-created_at<86400')->get();

数据库中时间
在 6月 30号查询 应该是两条数据 结果只显示一条 早上3点的数据查不到

通过打印检查SQL 语句:

select * from `good_indents` where now()-created_at<86400(还有排除软删除的语法 不影响查询);

遂通过 Navcat 用SQL 语句查询 结果和 Laravel 中显示一样

在 7月1号再次查询:将数据库中的时间 改为如下结构:
在这里插入图片描述
查询到数据为空

将时间改为 3点 则可查询到一条数据

改变写法:
Navcat 中检测:

select * from `good_indents` where UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(created_at)<86400; 

此时 能完整查询到 24小时内的 2 条数据

Laravel 中 改变写法:

$s=date("Y-m-d");
$e=date("Y-m-d "."23:59:59");
$GoodIndent = GoodIndent::whereBetween("created_at",[$s,$e])->get();

此时能查询到7月1号的1条数据

查找问题:

通过SQL语句:

SELECT now()-created_at from `good_indents`

在这里插入图片描述
改变写法:

SELECT UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(created_at) from `good_indents`

在这里插入图片描述

综上 Mysql 在timestamp类型字段的查询中 存在和我们开发者理解上的转换差异 所以在开发过程中 应当注意 此类情况 防止钻牛角尖

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据日期时间筛选数据,可以使用MySQL中的日期函数和日期格式转换函数。常用的日期函数有CURDATE()、CURTIME()、CURRENT_TIMESTAMP()、NOW()和SYSDATE(),可以用来查询当前日期时间。\[1\]日期格式转换函数可以使用date_format(),可以从日期日期时间表达式中提取部分,比如提取年份、月份或日期。\[2\]另外,还可以使用YEARWEEK()函数来筛选特定周的数据,需要注意设置mode参数为1,才是从周一开始计算。\[3\] 例如,要查询当天的数据,可以使用以下语句: SELECT * FROM 表 WHERE date_format(时间,'%Y-%m-%d') = date_format(now(),'%Y-%m-%d'); 要查询当月的数据,可以使用以下语句: SELECT * FROM 表 WHERE date_format(时间,'%Y-%m') = date_format(now(),'%Y-%m'); 要查询当年的数据,可以使用以下语句: SELECT * FROM 表 WHERE date_format(时间,'%Y') = date_format(now(),'%Y'); 要查询特定周的数据,可以使用以下语句: 从周日开始计算: SELECT * FROM 表 WHERE YEARWEEK(date_format(时间,'%Y-%m-%d')) = YEARWEEK(now()); 从周一开始计算: SELECT * FROM 表 WHERE YEARWEEK(date_format(时间,'%Y-%m-%d'),1) = YEARWEEK(now(),1); 要查询上周的数据,可以使用类似的语句,只需将YEARWEEK(now())或YEARWEEK(now(),1)的值减1即可。 以上是一些常用的MySQL日期时间筛选的方法,根据具体需求可以选择适合的函数和语句进行筛选。 #### 引用[.reference_title] - *1* [Mysql - 时间范围筛选](https://blog.csdn.net/qiaohao0206/article/details/125414875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [mysql各种时间筛选方法,获取天、周、月、年等](https://blog.csdn.net/qq_30591163/article/details/106196470)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值