昨天面试的时候让我写一个sql,我没有写出来。在这里我就不把题目贴出来了。我写SQL的困难在于不知道MySQL的有关日期的内置函数,所以当时就写不出来。在网上搜了点资料,感觉大家都只说了如何获取日期,却没有涉及到与数据库中的数据日期进行比较的阶段。所以我在这里把它贴出来,希望能对大家有帮助。
获取昨天的日期
主要是用了MySQL的内置函数
DATE_ADD(date,INTERVAL expr unit)
参数date是指限定的日期。可以手动设置日期,例如‘20200725’;也可以用函数CurDate()动态获取现在的日期。
INTERAVL可能是一个间隙?在实际使用中好像没什么用。如果大家有谁知道这个关键字有什么用的话可以告诉我吗?
expr是一个表达式,如果只是一个单独的数字,那么就是指定日期相加上这个数值;如果是以‘-’开头,则是在指定日期上减去这个数值。
unit则是单位。指定先前expr的单位。可用项有:day、week、month和year。
利用这个函数我们就可以获取到与指定日期相距指定时间的日期时间。
当然DATE_SUB(date,INTERVAL expr unit)
也是可以实现相同的功能。之前提到的add默认是相加,而sub则默认是相减。
如果要获取到昨天的日期的话,可以这样写
DATE_ADD(CURDATE(),INTERVAL -1 day)
数据日期的比较
我们现在已经获取到了昨天的日期,现在要做的就是要把获取到的时间与数据库的时间进行一个比较。
因为数据库的相关的时间数据的默认值是当前时间,所以的话数据里的时间是这样的2020-07-24 15:22:03
。我们需要从这个表达式中提取出日期。
利用MySQL的内置函数Date(date)
就能实现了。把数据库的时间传入这个函数,就能得到对应的日期。
举一个例子吧。
这个是我的表结构,表名为cloud_file
我要获取到昨天上传过文件的user_id,对应的sql语句如下:
select user_id from cloud_file where DATE_ADD(CURDATE(),INTERVAL -1 day) = DATE(upload_time);
执行结果返回符合预期。
当然MySQL还有许多有关时间的内置函数,还是需要进一步学习的啊。
可以去看看这个网站w3cSchool中有关时间的函数。
欢迎一起学习讨论。