下午同事反映管理后台的一个模块根据时间段搜索得出结果有问题。这个字段是记录支付时间的。查询了下数据库中该字段的所有值,发现该字段最后几个值有问题:之前记录的支付时间格式都是"Y-m-d H:i:s",最近记录的值的格式都变成了"YmdHis"。看了下源码,发现该字段是用来保存支付完成后相关支付服务商返回的支付时间。发生异常的支付时间基本为微信支付返回的(偷偷改变返回数据格式,也不发个公告,批评一下)。
在源码里做了格式处理后,回过头来还需要处理下这些“问题”值。感觉写php脚本去跑一遍问题数据,还得提交到服务器才能运行,虽然Carbon很好用、好用、用。但是直接写mysql语句跑一下就可以直接修改。用惯了ORM模型去执行CURD操作,发现自己对原生的mysql语句接近一无所知。赶紧上Google查,发现mysql有个DATE_FORMAT()函数(Google比某度靠谱多了)。从搜索结果直接跳转到mysql官网上该函数的相关说明页面。
说明着重强调了可以转换为哪些格式,似乎在竭力告诉大家,mysql可以做到满足你的任何格式要求。但是似乎忘记说明哪些格式的日期可以用来被格式化。在动手测试前还犹豫,像"YmdHis"这种格式能否格式化得出来,毕竟看起来很不寻常。还是那句话:行不行,跑一遍就知道。结果如下图所示。
支付宝返回的支付时间格式会带上毫秒,顺手也测试一下,毫无压力。DATE_FORMAT很好很强大!写好mysql语句处理完有问题的数据,下班回家:)(顺便推荐下mycli,提高生产率的工具)