Mysql 內部函數的使用
算數運算子
+, -, *, /
除于
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
可以不提供,如果提供會用來產生隨意數。
|
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) -
傳回字段的總數
posted on 2006-04-21 21:05 靜夜思 閱讀(326) 評論(0) 編輯 收藏 所屬分類: 開源軟件