意料外的MySQL运算符可获更多数据功能

如果你在最近进行过SELECT或UPDATE查询,那么你很可能用到过一个或者多个MySQL的比较运算符来限制查询的输出结果。比较是大多数SELECT查询不可分割的一部分,而MySQL为这一功能提供了很多函数;根据最近一次统计,它有超过20个这样的运算符和函数,从著名的=和LIKE到更加难懂的NOT IN和STRCMP()。

本文把重点放在一些不太常见的MySQL数据比较函数和运算符上,讨论它们可以被如何运用在应用程序里比较表格字段里的字符串、数字和日期/时间或者用户提供的值。

BETWEEN

BETWEEN运算符是测试在某个范围内是否存在一个数值或者日期值的有用方式。这个运算符接受两个参数——最大值和最小值,并测试所提供的值是否在这两个值的范围之内。如果在这个范围之内,运算符就返回一个布尔值——真;否则,它就返回一个伪值。下面就是一个例子:

以下为引用的内容:
mysql> SELECT 2350 BETWEEN 100 AND 10000;
            +----------------------------+
            | 2350 BETWEEN 100 AND 10000 |
            +----------------------------+
            |                          1 |
            +----------------------------+
            1 row in set (0.18 sec)

下面两个例子用到了日期值:

以下为引用的内容:
mysql> SELECT 20060405 BETWEEN 20060101 AND 20070101;
            +----------------------------------------+
            | 20060405 BETWEEN 20060101 AND 20070101 |
            +----------------------------------------+
            |                                      1 |
            +----------------------------------------+
            1 row in set (0.00 sec)
            mysql> SELECT 20060405 BETWEEN 20060101 AND 20060401;
            +----------------------------------------+
            | 20060405 BETWEEN 20060101 AND 20060401 |
            +----------------------------------------+
            |                                      0 |
            +----------------------------------------+
            1 row in set (0.00 sec)

GREATEST和LEAST

GREATEST和LEAST运算符为判断一组数字或者时间值中最大和最小值提供了一个便捷的途径。你一看名字就知道这两个运算符的作用——下面是一个对一组日期使用GREATEST运算符的例子:

以下为引用的内容:
mysql> SELECT GREATEST(20000601, 20000529, 20000604);
            +----------------------------------------+
            | GREATEST(20000601, 20000529, 20000604) |
            +----------------------------------------+
            |                               20000604 |
            +----------------------------------------+
            1 row in set (0.00 sec)

而下面是一个对一组数值使用LEAST运算符的例子:

以下为引用的内容:
mysql> SELECT LEAST(100, 200, 50, -6, -73, 1000);
            +------------------------------------+
            | LEAST(100, 200, 50, -6, -73, 1000) |
            +------------------------------------+
            |                                -73 |
            +------------------------------------+
            1 row in set (0.03 sec)

IN

IN是一种用来测试在预先指定的选项列表里是否存在某个特定值的有用运算符。它可以用在数字、字符和时间值上。它接受两个参数——要被测试的值和选项列表。下面就是一个使用字符串的例子:

以下为引用的内容:
mysql> SELECT 'c' IN ('a', 'b', 'c', 'd');
            +-----------------------------+
            | 'c' IN ('a', 'b', 'c', 'd') |
            +-----------------------------+
            |                           1 |
            +-----------------------------+
            1 row in set (0.02 sec)

下面一个例子用到了数字:

以下为引用的内容:
mysql> SELECT 1 IN (3,4,5);
            +--------------+
            | 1 IN (3,4,5) |
            +--------------+
            |            0 |
            +--------------+
            1 row in set (0.00 sec)

COALESCE

COALESCE运算符在区分列表中NULL和非NULL值上十分有用。利用提供的值的列表,它会返回列表中第一个非NULL的值,或者,如果不存在非NULL的值,它就会返回一个NULL。这在你有一个同时含有NULL和实际内容的列,并且希望快速地“跳到”第一个非NULL的记录时尤其方便。下面就是一个例子:

以下为引用的内容:
mysql> SELECT COALESCE(NULL, 'bat', 12, NULL);
            +---------------------------------+
            | COALESCE(NULL, 'bat', 12, NULL) |
            +---------------------------------+
            | bat                             |
            +---------------------------------+
            1 row in set (0.02 sec)

 
INTERVAL
INTERVAL运算符提供另外一种对数字及其范围的控制。它接受一个数字列表(N0, N1, N2...),将N0与剩下的所有数字比较,返回大于N0的最小数字所处的位置索引。数字N1, N2...必须按升序排列。

看看下面的例子,它将数字24与列表里的数字(5, 10, 15, 20, 25, 30)进行比较:

以下为引用的内容:
mysql> SELECT INTERVAL (24, 5, 10, 15, 20, 25, 30);
            +--------------------------------------+
            | INTERVAL (24, 5, 10, 15, 20, 25, 30) |
            +--------------------------------------+
            |                                    4 |
            +--------------------------------------+
            1 row in set (0.07 sec)

在这个例子中,24比25(索引位置4)小,但是比20(索引位置3)大,因此它的INTERVAL是4。

STRCMP

STRCMP()函数是MySQL里比较字符串的最简单方式之一。这个函数接受两个参数——要被比较的字符串。如果这个两个字符串相同,它就返回0;如果第一个大于第二个,它就返回1;如果第一个小于第二个,它就返回-1。比较的结果完全依赖当前使用时的字符集。下面就是几个例子:

以下为引用的内容:
mysql> SELECT STRCMP('hell', 'hell');
            +------------------------+
            | STRCMP('hell', 'hell') |
            +------------------------+
            |                      0 |
            +------------------------+
            1 row in set (0.00 sec)mysql> SELECT STRCMP('bell', 'hell');
            +------------------------+
            | STRCMP('bell', 'hell') |
            +------------------------+
            |                     -1 |
            +------------------------+
            1 row in set (0.00 sec)

REGEXP

要进行更加复杂的字符串比较,REGEXP函数常常要比用滥了的LIKE语句更加强大。这个函数会把一个表达式与一个正则表达式模式进行比较,如果找到匹配的,它就返回布尔值——真。下面是这样一个例子:

以下为引用的内容:
mysql> SELECT 'The Matrix' REGEXP '[u-z]$';
            +------------------------------+
            | 'The Matrix' REGEXP '[u-z]$' |
            +------------------------------+
            |                            1 |
            +------------------------------+
            1 row in set (0.00 sec)

DATEDIFF

正如其名字所表示的,DATEDIFF()函数是一个快速获得两个日期之间天数的工具。这对于计算到某个事件发生时的天数,或者在给定某人的生日时计算他/她的年龄很有用。

以下为引用的内容:
mysql> SELECT DATEDIFF(20060101, 20051201);
            +------------------------------+
            | DATEDIFF(20060101, 20051201) |
            +------------------------------+
            |                           31 |
            +------------------------------+
            1 row in set (0.00 sec)

DATEDIFF()通常与NOW()函数一起使用——例如,计算今天到过去或者未来任意一天之间的天数。下面就是一个例子:

以下为引用的内容:
mysql> SELECT DATEDIFF(NOW(), 20060203);
            +---------------------------+
            | DATEDIFF(NOW(), 20060203) |
            +---------------------------+
            |                       176 |
            +---------------------------+
            1 row in set (0.00 sec)

以上就是本文的内容。要记住的是,你可以在MySQL手册里发现更多关于这些函数的信息。

时间: 2024-10-29 05:38:32

意料外的MySQL运算符可获更多数据功能的相关文章

mysql c# 代理-使用代理上网情况下c#如何连接到外网mysql进行查询

问题描述 使用代理上网情况下c#如何连接到外网mysql进行查询 开发环境:vs2010语言:c# 网络环境:使用代理上网由于公司设置不能直接上网,只能通过设置代理进行访问网络.请问c#中如何写mysql连接语句

MySQL数据库使用mysqldump导出数据详解_Mysql

mysqldump是mysql用于转存储数据库的客户端程序.它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等.可以用来实现轻量级的快速迁移或恢复数据库.是mysql数据库实现逻辑备份的一种方式. 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有

IE11浏览器更多新功能曝光

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   随着版本号为9364的Windows Blue系统正式曝光之后,关于新系统内置IE 11浏览器的更多新功能也相继曝光,除了前几天的标签同步功能之外今天外媒向我们展示了IE10上所没有的下载清单功能,当用户点击扳手按钮的时候就能看 到浏览器的下载清单,然后可以根据下载清单进行相关的操作. 早在IE10开始就默认开启Do Not Track功能,这项功能在IE11上

关于mysql使用存储过程插入大量数据的问题

问题描述 关于mysql使用存储过程插入大量数据的问题 创建数据库 create database ceshi; use ceshi; 创建表 create table ce( id int not null auto_increment, name varchar(50) default null, pw char(50), primary key(id)); 存储过程 delimiter // create procedure insert_ce(in item int) begin dec

mysql LOAD语句批量录入数据_Mysql

幸运的是,MySQL提供了一些方法用于批量录入数据,使得向表中添加数据变得容易了.本节以及下一节,将介绍这些方法.本节将介绍SQL语言级的解决方法. 1.基本语法 语法:LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中.如果指定LOCAL关键词,从客户主机读文件.如果LOCAL没指定,文件必须位于服务器上.(L

基于PHP和Mysql相结合使用jqGrid读取数据并显示_jquery

jqGrid可以动态读取和加载外部数据,本文将结合PHP和Mysql给大家讲解如何使用jqGrid读取数据并显示,以及可以通过输入关键字查询数据的ajax交互过程. 下面给大家展示效果图,喜欢的朋友可以阅读全文哦. jqGrid本身带有search和edit表格模块,但是这些模块会使得整个插件体积显得有点庞大,而且笔者认为jqGrid的搜索查询和编辑/添加功能不好用,所以笔者放弃jqGrid自有的search和edit表格模块,借助jquery利器来完成相关功能,符合项目的实际应用. XHTML

MySQL实现两张表数据的同步_Mysql

mysql通过触发器实现两个表的同步,需要了解的朋友可以看一下. 有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录.两张表的结构不同,需要将其中几个字段对应起来.可以用下面的触发器实现. 表A的触发器: begin set @disable=1; if @disable=1 and NOT EXISTS(SELECT 1 FROM tableB where ID=new.ID) then insert into tableB (

mysql 复制表结构和数据实例代码_Mysql

在mysql数据库开发中,我们有时候需要复制或拷贝一张表结构和数据到例外一张表,这个时候我们可以使用create ... select ... from语句来实现,本文章向大家介绍mysql复制表结构和数据一个简单实例,  比如现在有一张表,我们要将该表复制一份,以备以后使用,那么如何使用mysql语句来实现呢?其实我们可以直接使用create ... select ... from语句来实现,具体实现方法请看下面实例.  我们先来创建一张Topic表,创建Topic表的SQL语句如下: mys

ASP.NET仿新浪微博下拉加载更多数据瀑布流效果_实用技巧

闲来无事,琢磨着写点东西.貌似页面下拉加载数据,瀑布流的效果很火,各个网站都能见到各式各样的展示效果,原理大同小异.于是乎,决定自己写一写这个效果,希望能给比我还菜的菜鸟们一点参考价值. 在开始之前,先把实现的基本原理说一下.当夜幕下拉到底部的时候,js可以判断滚动条的位置,到达底部触发js方法,执行jquery的ajax方法,向后台一般处理程序夜幕ashx文件请求数据源,得到json格式的数据源.然后,遍历json数据源,拼接一个li标签,再填充到页面上去. 首先,我们来做个简单的html页面