CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  MySQL/Postgresql

SQL的问题??????

楼主dennis80(我爱亚薇)2003-08-04 14:52:47 在 其他数据库开发 / MySQL/Postgresql 提问

 
  SELECT   ad,   name,  
                Max(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MAX,                
                Min(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MIN  
    FROM   dianyuanping    
    WHERE   TO_DAYS(CESHISHIJIAN)   =   TO_DAYS(CURDATE())  
    GROUP   BY   name   ORDER   BY   AD  
   
  +----+------+------------------------------+------------------------------+  
  |   ad   |   name   |   MAX                                                     |   MIN                                                     |  
  +----+------+------------------------------+------------------------------+  
  |     2   |   ww       |   000023   /   2003-08-04   12:30:22   |   000023   /   2003-08-04   12:30:22   |  
  |     0   |   ss       |   002220   /   2003-08-04   01:02:02   |   0001.2   /   2003-08-04   01:02:00   |  
  |     1   |   ddd     |   000110   /   2003-08-04   02:00:00   |   0001.8   /   2003-08-04   10:40:30   |  
  +----+------+------------------------------+------------------------------+  
  把ddd的值1.2改一下,则:  
   
  SELECT   ad,   name,  
                Max(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MAX,                
                Min(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MIN  
    FROM   dianyuanping    
    WHERE   TO_DAYS(CESHISHIJIAN)   =   TO_DAYS(CURDATE())  
    GROUP   BY   name   ORDER   BY   AD  
   
  +----+------+------------------------------+------------------------------+  
  |   ad   |   name   |   MAX                                                     |   MIN                                                     |  
  +----+------+------------------------------+------------------------------+  
  |     0   |   ss       |   002220   /   2003-08-04   01:02:02   |   000564   /   2003-08-04   13:12:00   |  
  |     1   |   ddd     |   0005.8   /   2003-08-04   02:00:00   |   000012   /   2003-08-04   10:40:30   |  
  |     2   |   ww       |   000023   /   2003-08-04   12:30:22   |   000023   /   2003-08-04   12:30:22   |  
  +----+------+------------------------------+------------------------------+  
   
  结果5.8>12????它怎么是按字符比较的啊???怎么解决? 问题点数:50、回复次数:19Top

1 楼shuixin13(犬犬(心帆))回复于 2003-08-04 15:29:12 得分 35

呵呵,  
   
  可能是你还没理解我给你的  
    Max(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))    
  真正的含义  
  我是思路是就是让数字以字符串方式比较,  
  这样才能达到你所要的目的  
   
   
  CESHIZHI+0.00  
  作用是将   CESHIZHI     字段中的整数从无小数点的   100     形式变为统一的有两位小数的形式  
   
  LPAD(CESHIZHI+0.00,6,'0')  
  作用是将所有的数变换为一个等长的字符串,  
  这样就可以字符串形式比较两个数的大小了  
   
  在这里,  
  '0005.8   /'  
  '000012   /'  
  两个字符那是一定第一个大了,所以会出现你上面的问题,  
   
   
   
  不知你说:   "把ddd的值1.2改一下     "  
  这一句是什么意思????不明白  
   
   
   
  #  
  #   Table   structure   for   table   't1'  
  #  
   
  CREATE   TABLE   t1   (  
      fenji   int(11)   NOT   NULL   default   '0',  
      ad   tinyint(4)   default   NULL,  
      name   char(10)   default   NULL,  
      ceshizhi   decimal(5,2)   default   NULL,  
      ceshishijian   datetime   default   NULL  
  )   TYPE=MyISAM;  
   
   
   
  #  
  #   Dumping   data   for   table   't1'  
  #  
   
  INSERT   INTO   t1   VALUES("1",   "1",   "ddd",   "22.30",   "2003-08-04   10:40:30");  
  INSERT   INTO   t1   VALUES("1",   "0",   "ss",   "12.30",   "2003-08-04   01:02:00");  
  INSERT   INTO   t1   VALUES("1",   "2",   "ww",   "23.00",   "2003-08-04   12:30:22");  
  INSERT   INTO   t1   VALUES("1",   "3",   "ddd",   "110.00",   "2003-08-04   02:00:00");  
   
  #  
  #   测试语句  
  #  
   
  SELECT   ad,   name,  
                MAX(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MAX,                
                MIN(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MIN  
    FROM   t1    
    WHERE   TO_DAYS(CESHISHIJIAN)   =   TO_DAYS(CURDATE())  
    GROUP   BY   name;  
     
  /*  
  测试结果  
   
  mysql>   SELECT   ad,   name,  
          ->                 MAX(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MAX,  
   
          ->                 MIN(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MIN  
          ->     FROM   t1  
          ->     WHERE   TO_DAYS(CESHISHIJIAN)   =   TO_DAYS(CURDATE())  
          ->     GROUP   BY   name;  
  +------+------+------------------------------+------------------------------+  
  |   ad       |   name   |   MAX                                                     |   MIN                                                     |  
  +------+------+------------------------------+------------------------------+  
  |         1   |   ddd     |   110.00   /   2003-08-04   02:00:00   |   022.30   /   2003-08-04   10:40:30   |  
  |         0   |   ss       |   012.30   /   2003-08-04   01:02:00   |   012.30   /   2003-08-04   01:02:00   |  
  |         2   |   ww       |   023.00   /   2003-08-04   12:30:22   |   023.00   /   2003-08-04   12:30:22   |  
  +------+------+------------------------------+------------------------------+  
  3   rows   in   set   (0.01   sec)  
   
  */Top

2 楼dennis80(我爱亚薇)回复于 2003-08-04 15:39:06 得分 0

你说的我都明白,可是这样与实际的值不符啊??该怎么解决呢??Top

3 楼dennis80(我爱亚薇)回复于 2003-08-04 15:40:45 得分 0

不知你说:   "把ddd的值1.2改一下     "  
   
  我是在做测试SQL语句时,改动的数据,没什么关系!Top

4 楼shuixin13(犬犬(心帆))回复于 2003-08-04 16:05:13 得分 0

呵呵,  
  我是说你改动成什么之后应变成上面的结果了??Top

5 楼dennis80(我爱亚薇)回复于 2003-08-04 17:21:53 得分 0

没改什么啊!我现在只是想让它能按照数字取最大、最小值,字符有问题啊!Top

6 楼shuixin13(犬犬(心帆))回复于 2003-08-04 17:56:39 得分 0

LPAD(CESHIZHI+0.00,6,'0'),  
   
  中的   6   需要按你的实际字段大小更改Top

7 楼lxf_1976(小木)回复于 2003-08-05 17:10:45 得分 0

对  
   
  LPAD(111+0.00,   6,   '0')         ->       111.00  
  LPAD(1111+0.00,   6,   '0')       ->       1111.0  
  LPAD(1111+0.00,   7,   '0')       ->       1111.00Top

8 楼lxf_1976(小木)回复于 2003-08-05 17:20:27 得分 15

另:  
  楼主的结果是怎么出来的?我不太明白  
   
  SELECT   ad,   name,  
                Max(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MAX,                
                Min(CONCAT(LPAD(CESHIZHI+0.00,6,'0'),'   /   ',CESHISHIJIAN))   AS   MIN  
    FROM   dianyuanping    
    WHERE   TO_DAYS(CESHISHIJIAN)   =   TO_DAYS(CURDATE())  
    GROUP   BY   name   ORDER   BY   AD  
   
  +----+------+------------------------------+------------------------------+  
  |   ad   |   name   |   MAX                                                     |   MIN                                                     |  
  +----+------+------------------------------+------------------------------+  
  |     2   |   ww       |   000023   /   2003-08-04   12:30:22   |   000023   /   2003-08-04   12:30:22   |  
  |     0   |   ss       |   002220   /   2003-08-04   01:02:02   |   0001.2   /   2003-08-04   01:02:00   |  
  |     1   |   ddd     |   000110   /   2003-08-04   02:00:00   |   0001.8   /   2003-08-04   10:40:30   |  
  +----+------+------------------------------+------------------------------+  
   
  如果CESHIZHI字段为数值类型,则MAX、MIN结果中,'000023'等数据应该显示为'023.00',如果CESHIZHI字段为字符串类型,则LPAD(CESHIZHI+0.00,6,'0')中'+0.00'这步操作根本不起作用......  
   
  疑问中????Top

9 楼shuixin13(犬犬(心帆))回复于 2003-08-05 17:39:59 得分 0

唉,  
  我的疑惑就是这个,  
  可惜楼主一直没说清Top

10 楼dennis80(我爱亚薇)回复于 2003-08-05 19:59:34 得分 0

CESHIZHI是DOUBLE型的啊。这个问题我再看看,先谢谢各位!今天单位上不了网,所以没在线!明天去单位再试试!我是用MYSQL   CC测试的,不知道可以不??  
  Top

11 楼shuixin13(犬犬(心帆))回复于 2003-08-05 21:09:09 得分 0

呵呵,应该不会有什么问题,  
   
  如果不放心可以用     mysql.exe   测试Top

12 楼dennis80(我爱亚薇)回复于 2003-08-06 09:20:35 得分 0

SELECT   ad,name,MAX(CONCAT(LPAD(CESHIZHI+0.00,10,'0'),'/',CESHISHIJIAN))   AS   MAX    
  FROM     dianyuanping   WHERE   TO_DAYS(CESHISHIJIAN)=TO_DAYS(CURDATE())   GROUP   BY   NAME  
   
  +----+------+--------------------------------+  
  |   ad   |   name   |   MAX                                                         |  
  +----+------+--------------------------------+  
  |     1   |   ddd     |   00000005.8/2003-08-06   20:00:00   |  
  |     0   |   ss       |   0000002220/2003-08-06   05:02:02   |  
  |     2   |   ww       |   0000000023/2003-08-06   12:30:22   |  
  +----+------+--------------------------------+  
   
  数据库中的数据为:  
   
  SELECT   *  
  FROM   `dianyuanping`  
   
  +-------+----+------+----------+---------------------+  
  |   fenji   |   ad   |   Name   |   CESHIZHI   |   CESHISHIJIAN                 |  
  +-------+----+------+----------+---------------------+  
  |           1   |     1   |   ddd     |             402   |   2003-08-06   03:40:30   |  
  |           1   |     0   |   ss       |           13.2   |   2003-08-06   01:02:00   |  
  |           1   |     2   |   ww       |               23   |   2003-08-06   12:30:22   |  
  |           1   |     3   |   ddd     |             5.8   |   2003-08-06   20:00:00   |  
  |           1   |     4   |   ss       |             564   |   2003-08-06   13:12:00   |  
  |           1   |     5   |   ss       |           2220   |   2003-08-06   05:02:02   |  
  +-------+----+------+----------+---------------------+  
   
   
  这个问题我也很纳闷啊??Top

13 楼dennis80(我爱亚薇)回复于 2003-08-06 09:22:40 得分 0

把CESHIZHI改成INT   就可以显示正确的结果!!!!Top

14 楼lxf_1976(小木)回复于 2003-08-06 09:44:37 得分 0

INT可以反映你的CESHIZHI数据吗?  
   
  建议你考虑一下float(10,   2)类型Top

15 楼dennis80(我爱亚薇)回复于 2003-08-06 10:01:32 得分 0

FLOAT   和DOUBLE   我都试过了啊!Top

16 楼dennis80(我爱亚薇)回复于 2003-08-06 10:06:30 得分 0

在MYSQL   CC中怎么设FLOAT(10,1)啊??Top

17 楼lxf_1976(小木)回复于 2003-08-06 10:16:44 得分 0

What's   the   'MYSQL   CC'?Top

18 楼dennis80(我爱亚薇)回复于 2003-08-06 10:40:05 得分 0

MYSQL   Control   Center   0.9.2-beta  
   
  不过现在问题解决了!  
  SELECT   ad,name,MAX(CONCAT(LPAD(CESHIZHI+0.0,8,'0'),'/',CESHISHIJIAN)   )     ,MIN(CONCAT(LPAD(CESHIZHI+0.0,8,'0'),'/',CESHISHIJIAN))   ,  
    AVG(CESHIZHI)      
  FROM     dianyuanping   WHERE   TO_DAYS(CESHISHIJIAN)=TO_DAYS(CURDATE())   GROUP   BY   NAME   ORDER   BY   AD  
   
  CESHIZHI类型为DOUBLE(11,1)  
   
   
  谢谢小木,心帆!!Top

19 楼lxf_1976(小木)回复于 2003-08-06 11:10:59 得分 0

:)  
   
  恭喜Top

相关问题

  • SQL???
  • sql????????????????????
  • sql
  • SQL????
  • sql
  • sQl
  • sql
  • sql
  • sql???
  • SQL????

关键词

  • 字段
  • 数据
  • 解决
  • mysql
  • ceshizhi
  • ceshishijian
  • lpad
  • concat
  • ddd
  • 字符串

得分解答快速导航

  • 帖主:dennis80
  • shuixin13
  • lxf_1976

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo