题目一:用time Like '2008-06-01%'语句来查询该天的所有数据
方法一:Convert转成String,在用Like查询select * from table1 where **convert(varchar,date,120) like '2006-04-01%';**
方法二:Betweenselect * from table1 where **time between '2006-4-1 0:00:00' and '2006-4-1 23:59:59'"**;
方法三:datediff() 函数select * from table1 where **datediff(day,time,'2006-4-1')=0;**
题目二:用左连接匹配该柜的信息,难点在于柜号有重复,且日期不一定相同,只能匹配日期相差不超过一定天数的信息
# test1DROP TABLE IF EXISTS `test1`;CREATE TABLE `test1` (`柜号` VARCHAR ( 255 ) NOT NULL,`到货日期` datetime NULL) ENGINE = INNODB CHARACTERSET = utf8;# 插入数据INSERT INTOtest1(`柜号`, `到货日期`)VALUES('ABCD1234567','2022-07-01'),('ABCD1234567','2022-04-01'),('EFGH3456789','2022-01-01'),('EFGH2345678','2022-07-01');# test2DROP TABLE IF EXISTS `test2`;CREATE TABLE `test2` (`柜号` VARCHAR ( 255 ) NULL,`入库日期` datetime NULL,`入库状态` VARCHAR ( 255 ) NULL) ENGINE = INNODB CHARACTERSET = utf8;# 插入数据INSERT INTOtest2(`柜号`, `入库日期`, `入库状态`)VALUES('ABCD1234567','2022-06-01',"已完成"),('ABCD1234567','2022-06-25',"待补录"),('ABCD1234567','2022-03-01',"待确认");
SELECT
a.*,
b.`入库日期`,
b.`入库状态`
FROM test1 a
LEFT JOIN test2 b
ON (a.`柜号`=b.`柜号` AND DATEDIFF(b.`入库日期`,a.`到货日期`) BETWEEN -31 AND 31)
假设右表在满足柜号和日期两个条件的情况下,匹配的右表数据还是有重复,则需要连接右表之前先对右表进行过滤,具体情况分类处理
