MySQL中的函数
之前看到过一个例子,使用RTrim() 函数来去除列值右边的空格。
使用Upper()函数
SELECT vend_name,Upper(bend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;
正如所见,Upper()将文本转换为大写,因此本例子中每个供 应商都列出两次,
第一次为vendors表中存储的值,第二次作 为列vend_name_upcase转换为大写
SOUNDEX:
SOUNDEX是一个将任何文 本串转换为描述其语音表示的字母数字模式的算法。
SOUNDEX考虑了类似 的发音字符和音节,使得能对串进行发音比较而不是字母比较。
首先需要注意的是MySQL使用的日期格式。
无论什么时候指定一个日期,不管是插入或更新表值还是用WHERE子句进行过滤,日期必须为 格式yyyy-mm-dd。
因此,2005年9月1日,给出为2005-09-01。
虽然其他的 日期格式可能也行,但这是首选的日期格式,因为它排除了多义性
SELECT cust_id,order_num,order_date FROM orders WHERE order_date = '2005-09-01';
此SELECT语句正常运行。它检索出一个订单记录,该订单记录 的order_date为2005-09-01
- 但是,使用WHERE order_date = '2005-09-01’可靠吗?
- ?order_ date的数据类型为datetime。这种类型存储日期及时间值。样例表中 的值全都具有时间值00:00:00,但实际中很可能并不总是这样。
- 解决办法是指示MySQL仅将给出的日期与列中的日期部分进行比 较,而不是将给出的日期与整个列值进行比较。
- 为此,必须使用Date() 函数。Date(order_date)指示MySQL仅提取列的日期部分
SELECT cust_id,order_num,order_date FROM orders WHERE Date(order_date)='2005-09-01';
不过,还有一种日期比较需要说明。如果你想检索出2005年9月下的 所有订单,怎么办?简单的相等测试不行,因为它也要匹配月份中的天 数。
SELECT cust_id,order_num,order_date FROM orders WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';
其中,BETWEEN操作符用来把2005-09-01和2005-09-30定义为 一个要匹配的日期范围。
还有另外一种办法(一种不需要记住每个月中有多少天或不需要操 心闰年2月的办法
SELECT cust_id,order_num FROM orders WHERE Year(order_date) = 2005 AND Month(order_date)=9;
Year()是一个从日期(或日期时间)中返回年份的函数。
类似, Month()从日期中返回月份。
因此,WHERE Year(order_date)= 2005 AND Month(order_date) = 9检索出order_date为2005年9月的 所有行
(order_date)= 2005 AND Month(order_date) = 9检索出order_date为2005年9月的 所有行