算数运算子
+, -, *, /
除于
0
会等于
NULL
。
比较运算子
任何东西跟
NULL
比较会等于
NULL
。
比较字符串通常不需要注意大小写,如果要比较大小写,用
BINARY
关键词。
程序代码
:
SELECT *
FROM department
WHERE name = BINARY 'marketing';
程序代码
:
=
相等
!=
或
<>
不相等
<
小于
<=
小或等于
>
大于
>=
大或等于
n BETWEEN
min AND max
测试范围
n IN (set) set
可以是一系列的数值或子查询。
<=>
可以比较
NULL
,如果比较两个
NULL
会传回
1
。
n IS NULL
测试
n
是否
NULL
。
ISNULL(n)
测试
n
是否
NULL
。
逻辑运算子
传回的值有
1 (true), 0 (false,
或
NULL
。
任何不是
0
或不是
NULL
的值都是
true
。
程序代码
:
AND
或
&& n && m
和
true && true = true
false && anything = false
其它会等于
NULL
OR
或
|| n || m
或
true || anything = true
NULL || false = NULL
NULL || NULL = NULL
false || false = false
NOT
或
! NOT n
不是
!true = false
!false = true
!NULL = NULL
XOR n XOR m
不包含的
OR
true XOR true = false
true XOR false = true
false XOR true = true
NULL XOR n = NULL
n XOR NULL = NULL
控制流向的函式
IF (e1, e2, e3)
如果
e1
是
true
,
IF
会传回
e2
,不然会传回
e3
。
CASE value
WHEN [compare-value] THEN result
[WHEN [compare-value] THEN result ...]
[ELSE result]
END
或是
CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result ...]
[ELSE result]
END
程序代码
:
SELECT workdate, CASE
WHEN workdate < 2000-01-01 THEN "archived"
WHEN workdate < 2003-01-01 THEN "old"
ELSE "current"
END
FROM assignment;
字符串函式
concat(s1, s2, ...) -
连接字符串
s1
和
s2...
conv(n, original_base, new_base) -
转换数字
n
从本来的
base
到新的
base
length(s) -
找字符串的长度
load_file(filename) -
依照字符串传回档案的内容
locate(needle, haystack, position) -
传回
needle
字符串的开始位置,在
haystack
字符串里,从
position
开始
lower(s) and upper(s) -
转换
s
到小写或大写
quote(s) -
跳脱
s
字符串,让它可以安全输入数据库
replace(target, find, replace) -
传回
target
字符串,将
find
字符串覆盖成
replace
字符串
soundex(s) -
传回跟
s
类似的
soundex
字符串。
soundex
是字符串的发音
substring(s, position, length) -
传回字符串里的字符串,
s
是本来的字符串,
position
是开始的位置,
length
是传回的字数
trim(s) -
移除开头跟字尾的空格符。也可以用
rtrim()
或
ltrim()
字符串比较的函式
LIKE -
利用通配字符来进行比较
RLIKE -
利用正规表示法来进行比较
STRCMP -
比较字符串,类似
C
里面的
strcmp()
MATCH -
进行
full-text
比较
利用通配字符来进行比较
程序代码
:
SELECT *
FROM department
WHERE name LIKE '%research%';
%
会吻合任何字数,包括
0
。
_
会吻合单一字数,
_at
会吻合
cat, mat, bat...
利用正规表示法来进行比较
RLIKE
可以用来吻合正规表示法。
'cat'
会吻合
'catacomb'
和
'the cat sat on the mat'
。
如果只要吻合
'cat'
,用
'^cat$'
。
^
表示在吻合的字符串开头是
'cat'
。
$
表示在吻合的字符串最后是
'cat'
。
.
可以用来代表通配字符,
'.at'
会吻合
'cat', 'bat', 'mat'
。
*
表示字符可以出现零或多次,
'n*'
会吻合
'', 'nn', 'nnn'
。
()
会归类字符,
'(cat)*'
会吻合
'', 'cat', 'catcat', 'catcatcat'
。
.*
会吻合任何字或字符串。
+
表示在他之后的字或字符串会重复一或多次。
?
表示吻合一或零次。
列出特定的范围,
'(cat)(2,4)'
会吻合
'catcat', 'catcatcat',
和
'catcatcatcat'
。
[]
可以列出一系列的文字,
'[a-z]'
会吻合任何字母,
'[a-z]*'
会吻合任何数量的字母。
文字类别,
[[:alnum:]]
会吻合任何字母和数字的文字。
程序代码
:
SELECT *
FROM department
WHERE name RLIKE 'an';
这会吻合全部有包括
'an'
的部门。
用
STRCMP()
来比较字符串
STRCMP(s1, s2)
如果字符串相同会传回
0
,
-1
如果
s1
比
s2
小
(s1
比
s2
早出现
)
。
1
如果
s1
比
s2
大
(s1
比
s2
晚出现
)
。
程序代码
:
SELECT STRCMP('cat', 'cat');
//
传回
0
SELECT STRCMP('cat', 'dog');
//
传回
-1
SELECT STRCMP('cat', 'ant');
//
传回
1
数字函式
abs(n)
|
传回
n
的正数
|
ceiling(n)
|
n rounded up to the nearest integer
|
floor(n)
|
n rounded down to the nearest integer
|
mod(n,m)
和
div
|
这两个函式会将
n
除于
m
。
div
传回商数,
mod()
会传回剩余数。
|
power(n,m)
|
n to the power of m
|
rand(n)
|
传回
0
到
1
的随意数。
n
可以不提供,如果提供会用来产生随意数。
相同的
n
会产生相同的随意数。
|
round(n[,d])
|
n rounded to the nearest integer. if supply d, n will be rounded to d decimal places.
|
sqrt(n)
|
传回
n
的平方
|
mod()
可以是
mod(9,2)
或
9 mod 2
或
9 % 2
。
div
只能用
9 div 2
。
程序代码
:
SELECT 9 mod 2;
//
传回
1
SELECT 9 div 2;
//
传回
4
日期和时间函式
adddate(date, INTERVAL n type)
和
subdate(date, INTERVAL n type)
这些函式可以用来增加和减少日期。从
date
的日期开始计算,然后增加或减少
INTERVAL
后的日期范围。
你必须提供
n
和他的类型。类型可以是
SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, MINUTE:SECOND (m:s),
HOUR:MINUTE (h:m), DAY_HOUR(d h), YEAR_MONTH (y-m), HOUR_SECOND (h:m:s), DAY_MINUTE (d h:m),
DAY_SECOND (d h:m:s)
。
curdate(), curtime(), now()
这些函式会传回目前的日期,目前的时间,还有时间和日期。
date_format(date, format)
和
time_format(time, format)
这些可以用来改变日期和时间的格式。
你必须提供格式的字符串,譬如说
date_format(workdate, '%W %D of %M, %Y')
,
这会给你
'Monday 16th of June, 2003)
。
全部可用的格式请看
MySQL
的手册。
dayname(date)
传回日期的名称,例如
Monday
。
extract(type FROM date)
传回
date
的日期,譬如说
YEAR
,他就会传回那个日期的年数。
函式可用的类型跟
adddate()
和
subdate()
的类型相同。
unix_timestamp([date])
传回目前的
Unix
时间。如果跟
date
一起使用,传回的日期会从
date
的日期开始计算。
范例:
程序代码
:
SELECT adddate("1999-01-01", INTERVAL "1-6" YEAR_MONTH);
//
传回
2000-07-01
SELECT unix_timestamp(adddate("1999-01-01", INTERVAL "1-6" YEAR_MONTH);
//
传回
962373600
可以用
PHP
的
date()
函式来将
Unix
的时间格式化。
cast
函式
cast
可以用来改变类型,用
cast()
和
convert()
函式。
两个函式相同,但是不同的语法构造。
cast(expression AS type)
convert(expression, type)
cast()
是依照
ANSI
的规格,
convert()
是依照
ODBC
的规格。
类型可以是
BINARY, CHAR, DATE, DATETIME, SIGNED (INTEGER),
和
UNSIGNED (INTEGER)
。
通常
MySQL
会自动帮你改变类型。
其它函式
benchmark(count, expression)
这个函式是用来测试查询的速度,只会传回
0
值。
encrypt(s[,salt])
将
s
加密用
Unix
的加密系统。
salt
字符串是两个字符的字符串,可以不用。
如果没有
crypt
功能,像在
Windows
系统,这个函式会传回
NULL
。
found_rows()
传回字段的数量,如果没有用
LIMIT
。
只有在
SELECT
里使用
SQL_CALC_FOUND_ROWS
才能用这个函式。
last_insert_id()
传回最后产生的
AUTO_INCREMENT
值。
md5(s)
传回
128bit MD5
的加密字符串。
password(s)
计算
s
的密码,不建议用这个函式来储存密码。
用于
GROUP BY
的函式
这些还是专门为了
GROUP BY
而写的。
avg(column) -
传回字段的平均值
count(column) -
传回字段的数量
min(column) -
传回字段的最小值
max(column) -
传回字段的最大值
std(column) -
传回字段的标准差
sum(column) -
传回字段的总数