mysql 中两个日期相减获得 天 小时 分钟 或者 小时:分钟的格式
1 2 3 4 5 6 7 8 | /**有一个需求,要求获得两个日期想减的天数,小时数,分钟数。通过查找资料,于是乎我写出了如下代码,来获得两个字段。*/ IFNULL(CONCAT( IF(aib.`forecast_reply_time`-aib.`actual_reply_time` < 0, '-' , '' ), IF(FLOOR( HOUR (TIMEDIFF(aib.`forecast_reply_time`,aib.`actual_reply_time`)) / 24)=0, '' , CONCAT(FLOOR( HOUR (TIMEDIFF(aib.`forecast_reply_time`,aib.`actual_reply_time`)) / 24), '天' )), IF(MOD( HOUR (TIMEDIFF(aib.`forecast_reply_time`,aib.`actual_reply_time`)), 24)=0, '' ,CONCAT(MOD( HOUR (TIMEDIFF(aib.`forecast_reply_time`,aib.`actual_reply_time`)), 24), '小时' )), IF( MINUTE (TIMEDIFF(aib.`forecast_reply_time`,aib.`actual_reply_time`))=0, '0' ,CONCAT( MINUTE (TIMEDIFF(aib.`forecast_reply_time`,aib.`actual_reply_time`)), '分钟' ))), "" ) AS stipulatedOften, IFNULL(CONCAT( IF(FLOOR( HOUR (TIMEDIFF(aib.`created_at`,aib.`actual_reply_time`)) / 24)=0, '' , CONCAT(FLOOR( HOUR (TIMEDIFF(aib.`created_at`,aib.`actual_reply_time`)) / 24), '天' )), IF(MOD( HOUR (TIMEDIFF(aib.`created_at`,aib.`actual_reply_time`)), 24)=0, '' ,CONCAT(MOD( HOUR (TIMEDIFF(aib.`created_at`,aib.`actual_reply_time`)), 24), '小时' )), IF( MINUTE (TIMEDIFF(aib.`created_at`,aib.`actual_reply_time`))=0, '0' ,CONCAT( MINUTE (TIMEDIFF(aib.`created_at`,aib.`actual_reply_time`)), '分钟' ))), "" ) AS actualOften, |
1 2 3 | /**后来需求改变,用户觉得现实中文的天,小时,分钟太麻烦了,想要总共的小时数、分钟数,但是mysql的TIMEDIFF的方法,是精确到秒的,但是用户又不想要秒。于是乎我又一次进行了更改,使用到了mysql的 LEFT 函数和LENGTH函数进行了处理弄成了用户想要的样子*/ IFNULL( LEFT (TIMEDIFF(aib.`forecast_reply_time`,aib.`actual_reply_time`),LENGTH(TIMEDIFF(aib.`forecast_reply_time`,aib.`actual_reply_time`))-3), "" ) AS stipulatedOften, IFNULL( LEFT (TIMEDIFF(aib.`actual_reply_time`,aib.`created_at`),LENGTH(TIMEDIFF(aib.`actual_reply_time`,aib.`created_at`))-3), "" ) AS actualOften, |
1 2 3 4 | IF 表达式 IF( expr1 , expr2 , expr3 ) expr1 的值为 TRUE ,则返回值为 expr2 expr1 的值为 FALSE ,则返回值为 expr3 |
1 2 3 4 5 6 7 8 9 10 | 一般我们在使用ifnull()方法的时候,都是类似下面的语句: IFNULL(expr1,expr2) 如果expr1不是 NULL ,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值 select ifnull( name , 'no name' ) from person; 将查询到的结果中的 null 转化为指定的字符串,但是其实在 where 查询部分也可以使用ifnull(): select * from person where ifnull( name , 'no name' )= 'no name' ; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统