用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 数据库开发教程 > MySQL教程 > Mysql使用实例 > 文章正文
MySQL数据库技术(04)
iTbulo.COM 2005-4-10 佚名()

    6. 使用日期
   在MySQL 中使用日期时要记住的是,在表示日期时首先给出年份。1999 年7 月27 日表示为“1 9 9 9 - 0 7 - 2 7”,而不是像通常那样表示为“ 0 7 - 2 7 - 1 9 9 9”或“2 7 - 0 7 - 1 9 9 9”。MySQL 提供了几种对日期进行处理的方法。可以对日期进行的一些运算如下:
   ■ 按日期排序。(这点我们已经看到几次了。)
   ■ 查找特定的日期或日期范围。
   ■ 提取日期值的组成部分,如年、月或日。
   ■ 计算日期的差。
   ■ 日期增加或减去一个间隔得出另一日期。
   下面给出一些日期运算的例子。
   为了查找特定的日期,可使用精确的日期值或与其他日期值进行比较,将一个D ATE 列与有关的日期值进行比较:

    为了测试或检索日期的成分,可使用诸如YEAR( )、MONTH( ) 或D AYOFMONTH( ) 这样的函数。例如,可通过查找月份值为3 的日期,找出与笔者出生在相同月份(三月)的总统。


    为了更详细,详细到天,可组合测试MONTH( ) 和D AYOFMONTH( ) 以找出在笔者的生日出生的总统:

    这是一种可用来生成类似报纸上娱乐部分所刊登的那种“这些人今天过生日”清单的查询。但是,不必按前面的查询那样插入一个特殊的日期。为了查找每年的今天出生的总统,只要将他们的生日与C U R R E N T _ D ATE 进行比较即可:

    可从一个日期减去另一个日期。这样可以知道日期间的间隔,这对于确定年龄是非常有用的。例如,为了确定哪位总统活得最长,可将其逝世日期减去出生日期。为此,可利用函数TO _ D AYS( ) 将出生日期和逝世日期转换为天数,求出差,然后除以365 得出大概的年龄:

    此查询中所用的FLOOR( ) 函数截掉了年龄的小数部分,得到一个整数。得出日期之差,还可以确定相对于某个特定日期有多长时间。这样可以告诉历史同盟的会员,他们还有多久就应该更新自己的会员资格了。计算他们的截止日期和当前日期之差,如果小于某个阈值,则不久就需要更新了。下面的查询是查找需要在60 天内更新的会员:

    自MySQL 3.22 以来,可使用D ATE_ADD( ) 或D ATE_SUB( ) 从一个日期计算另一个日期。这些函数取一个日期及时间间隔并产生一个新日期。例如:

   本节中前面给出的一个查询选择70 年代逝世的总统,它对选择范围的端点使用直接的日期值。该查询可以利用一个字符串日期和一个由开始日期和时间间隔计算出的结束日期来重写:

    会员更新查询可根据D ATE_ADD( ) 写出如下:

    本章前面给出了一个查询如下,确定不久要来检查但还没来诊所的牙科病人:

    现在回过头来看,读者会更清楚这个查询的含义了。
    7. 模式匹配
    MySQL 允许查找与某个模式相配的值。这样,可以选择记录而不用提供精确的值。为了进行模式匹配运算,可使用特殊的运算符( LIKE 和NOT LIKE),并且指定一个包含通配符的串。字符“_”匹配任意单个字符,而“%”匹配任意字符序列(包括空序列)。使用L I K E或NOT LIKE 的模式匹配都是不区分大小写的。下列模式匹配以“W”或“w”开始的姓:

    此查询给出了一个常见的错误,它对一个算术比较运算符使用了模式。这种比较成功的惟一可能是相应的列确实包含串“ W %”或“w %”。下列模式匹配任意位置包含“W”或“w”的姓:


    MySQL 还提供基于扩展正规表达式的模式匹配。正规表达式在附录C 的REGEXP 运算符的介绍中描述。
    8. 生成汇总
    MySQL 所能做的最有用的事情是浓缩大量的原始数据行并对其进行汇总。当学会了利用MySQL 来生成汇总时,它就变成了用户强有力的好帮手了,因为手工进行汇总是一项冗长的、费时的、易出错的工作。汇总的一种简单的形式是确定在一组值中哪些值是唯一值。利用DISTINCT 关键字来删除结果中的重复行。例如,总统出生的各个州可按如下找出:

    其他的汇总形式涉及计数,可利用COUNT( ) 函数。如果使用COUNT (*),它将给出查询所选择的行数。如果一个查询无WHERE 子句,COUNT(*) 将给出表中的行数。下列查询给出共有多少人当过美国总统:

    如果查询有WHERE 子句,COUNT(*) 将给出此子句选择多少行。下面的查询给出目前为止对班级进行了多少次测试:


    COUNT(*) 对选中的行进行计数。而COUNT(col_name) 只对非NULL 值进行计数。下面的查询说明了这些差异:

    这表示,总共有41 位总统,他们中只有一个具有名字后缀,并且大多数总统都已去世。自MySQL 3.23.2 以来,可以将COUNT( ) 与DISTINCT 组合对选择结果集中不同的值进行计数。例如,为了对总统出生的不同州进行计数,可执行下列查询:

    可以根据汇总列中单独的值对计数值进行分解。例如,您可能根据下列的查询结果知道班级中所有学生的人数:

    但是,有多少是男孩?有多少是女孩?分别得出男孩、女孩的一种方法是分别对每种性别进行计数:

    虽然这个方法可行,但是它很繁锁而且并不真正适合于可能有许多不同的值的列。考虑一下怎样以这种方式确定每个州出生的总统人数。您不得不找出有哪些州,从而不能省略(SELECT DISTINCT state FROM president),然后对每个州执行一个SELECT COUNT(*) 查询。很显然,有些事是可以简化的。所幸MySQL 可以利用单个查询对一个列中不同的值进行计数。因此,针对学生表可以按如下得出男孩和女孩的人数:


    如果以这种方法对值计数, GROUP BY 子句是必须的;它告诉MySQL 在对值计数之前怎样进行聚集。如果将其省去,则要出错。COUNT(*) 与GROUP BY 一起用来对值进行计数比分别对每个不同的列值进行计数有更多的优点,这些优点是:
    ■ 不必事先知道要汇总的列中有些什么值。
    ■ 不用编写多个查询,只需编写单个查询即可。
    ■ 用单一查询就可以得出所有结果,因此可以对结果进行排序。
前两个优点对于更方便地表示查询很重要。第三个优点也较为重要,因为它提供了显示
结果的灵活性。在使用GROUP BY 子句时,其结果是在要分组的列上进行排序的,但是可以
使用ORDER BY 来按不同的次序进行排序。例如,如果想得到各州产生的总统人数,并按产
生人数最多的州优先排出,可以如下使用ORDER BY 子句:

 << 上一页  [11] [12] [13] 下一页

文章搜索
相关资讯
相关文章 相关下载
MySQL数据库技术(01)
MySQL数据库技术(02)
MySQL数据库技术(03)
MySQL数据库技术(05)
MySQL数据库技术(06)
焦点信息