• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql非一般查询_mysql

mysql 搞代码 7年前 (2018-06-08) 150次浏览 已收录 0个评论

mysql特殊查询

今天群里有人了一个问题,大概是要实现如下功能:

实现查询2015年6月1号-5号之内的数据,但是数据库里只有1号和3号两天的数据,2号和4号想查询的时候返回一个主键为-1的空数据,mysql数据库。(意思就是即使这一天没有数据,也要显示出日期,并且主键使用-1代替NULL,并且不能使用其他关联表,如日期表)

通过上网查询并整合,写了如下查询SQL,日期可以根据实际情况进行调整:

-- 定义自增变量 set @i = -1; -- 创建指定日期间记录数天数需要 加 1 set @sql = repeat(" select 1 union all",-datediff('2015-06-01','2015-06-05')+1); -- 将最后一个union all 去掉,这里前边加1个空格,就不用在减1了 set @sql = left(@sql,length(@sql)-length(" union all")); -- 拼接sql,注意日期与第一个SQL中的日期保持一致 set @sql = concat("select date_add('2015-06-01',interval @i:=@i+1 day) as date from (",@sql,") as tmp"); -- 最终要执行的SQL test1是测试表,就是存储数据的表 set @sql1 = concat("select coalesce(test1.id, -1) as id, t.date from test1 RIGHT JOIN (",  @sql, " )t on DATE_FORMAT(test1.date,'%Y-%m-%d') = t.date"); prepare stmt from @sql1;  execute stmt; 

 其中,test1表只包括id和date两个字段,id是主键,建表语句如下:

CREATE TABLE test1 ( id  int(11) NOT NULL DEFAULT 0 , date  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL , PRIMARY KEY (id) )

 测试数据如下:

INSERT INTO `test1` VALUES ('1', '2015-06-01  10:11:22'), ('2', '2015-06-03  10:11:22'), ('3', '2015-06-05  10:11:22'), ('4', '2015-06-06  10:11:22'), ('5', '2015-06-07  10:11:22');  

 注意:test1中date字段的格式包含具体时间,查询条件不包含时间只包含日期

欢迎大家阅读《mysql非一般查询_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql非一般查询_mysql

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址