原文鏈接地址:http://www.cnblogs.com/lyhabc/p/3699969.html
MYSQL中的運算符很多,這一節主要講MYSQL中有的,而SQLSERVER沒有的運算符
安全等於運算符(<=>)
這個操作符和=操作符執行相同的比較操作,不過<=>可以用來判斷NULL值。
在兩個操作數均為NULL時,其返回值為1而不為NULL;
而當一個操作數為NULL時,其返回值為0而不為NULL。
下面分別是
SELECT NULL <=>1 SELECT 1<=>0 SELECT NULL <=>NULL的執行結果
在兩個操作數均為NULL時,其返回值為1而不為NULL;
LEAST運算符
語法格式為:LEAST(值1,值2,...值n),其中值n表示參數列表中有n個值。在有兩個或多個參數的情況下,返回最小值。
假如任意一個自變量為NULL,則LEAST()的返回值為NULL
使用LEAST運算符進行大小判斷,SQL語句如下:
SELECT LEAST(2,0),LEAST('a','b','c'),LEAST(10,NULL)
由結果可以看到,當參數中是整數或者浮點數時,LEAST將返回其中最小的值;
當參數為字符串時,返回字母中順序最靠前的字符;
當比較值列表中有NULL時,不能判斷大小,返回值為NULL
GREATEST運算符
語法格式為: GREATEST(值1,值2,...值n),其中n表示參數列表中有n個值。
在有兩個或多個參數的情況下,返回最大值。
假如任意一個自變量為NULL,則GREATEST()的返回值為NULL
使用GREATEST運算符進行大小判斷,SQL語句如下:
SELECT GREATEST(2,0),GREATEST('a','b','c'),GREATEST(10,NULL)
由結果可以看到,當參數中是整數或者浮點數時,GREATEST將返回其中最大的值;
當參數為字符串時,返回字母中順序最靠後的字符;
當比較值列表中有NULL時,不能判斷大小,返回值為NULL
REGEXP 運算符
在SQLSERVER裡是沒有正則函數或者運算符的,MYSQL在這方面的確比較完善
用來匹配字符串,語法格式為:expr REGEXP 匹配條件,如果expr滿足匹配條件,返回1;
如果不滿足,則返回0;
若expr或匹配條件任意一個為NULL,則結果為NULL
常用的幾種通配符:
(1)'^'匹配以該字符後面的字符開頭的字符串
(2)'$'匹配以該字符後面的字符結尾的字符串
(3)'.'匹配任何一個單字符
(4)'[...]'匹配在方括號內的任何字符。例如,“[abc]" 匹配a、b或c。
字符的范圍可以使用一個'-',“[a-z]”匹配任何字母,而“[0-9]”匹配任何數字
(5)'*' 匹配零個或多個在他前面的字符。例如,“x*”匹配任何數量的'*'字符,“[0-9]*”匹配任何數量的數字,
而“.*”匹配任何數量的任何字符。
使用REGEXP 運算符進行字符串匹配運算,SQL語句如下:
SELECT 'ssky' REGEXP '^s','ssky' REGEXP 'y$' ,'ssky' REGEXP '.sky','ssky' REGEXP '[ab]';
由結果可以看到,指定匹配字符串為ssky。
'^s'表示匹配任何以字母s開頭的字符串,因此滿足匹配條件,返回1;
'y$'表示匹配任何以字母y結尾的字符串,因此滿足匹配條件,返回1;
'.sky'表示匹配任何以sky結尾,字符長度為4的字符串,因此滿足匹配條件,返回1;
'^s'表示匹配任何以字母s開頭的字符串,因此滿足匹配條件,返回1;
'[ab]'表示匹配任何包含字母a或者b的字符串,指定字符串中沒有字母a也沒有字母b,因此不滿足匹配條件,返回0;
TIPS:正則表達式是一個可以進行復雜查詢的強大工具,相對於LIKE字符串匹配,他可以使用更多的通配符類型
查詢結果更加靈活。
邏輯運算符
邏輯與運算符:AND或者&&
邏輯或運算符:OR或者||
上面兩個運算符就不說了
在SQLSERVER裡,與運算符是AND或者& ;或運算符是OR或者|
http://sqlfool.com/2009/02/bitwise-operations/
--DROP TABLE myTable CREATE Table myTable ( id int identity(1,1) , item varchar(10) , attributes int ); Insert Into myTable Select 'Broccoli', 200 Union All Select 'Tomato', 193 Union All Select 'Car', 276 Union All Select 'Ball', 292; DECLARE @statusLookup Table ( attribute int , value varchar(10) ); Insert Into @statusLookup Select 1, 'Red' Union All Select 4, 'Blue' Union All Select 8, 'Green' Union All Select 16, 'Metal' Union All Select 32, 'Plastic' Union All Select 64, 'Plant' Union All Select 128, 'Edible' Union All Select 256, 'Non-Edible'; Select a.item, b.value From myTable a Cross Join @statusLookup b Where a.attributes & b.attribute <> 0 Order By a.item , b.value
異或運算符:XOR
當任意一個操作數為NULL時,返回值為NULL;對於非NULL的操作數,如果兩個操作數都是非0值或者都是0值,則返回結果為0;
如果一個為0值,另一個為非0值,返回結果為1
使用異或運算符XOR進行邏輯判斷,SQL語句如下
SELECT 1 XOR 1, 0 XOR 0,1 XOR 0,1 XOR NULL,1 XOR 1 XOR 1
由結果可以看到‘1 XOR 1’和‘0 XOR 0’中運算符兩邊的操作數都為非零值,或者都是零值,因此返回0;
'1 XOR 0'中兩邊的操作數,一個為0值,另一個為非0值,返回結果為1;
'1 XOR NULL'中有一個操作數為NULL,返回結果為NULL;
'1 XOR 1 XOR 1'中有多個操作數,運算符相同,因此運算符從左到右依次計算,'1 XOR 1'的結果為0,再與1進行異或運算,因此結果為1。
TIPS: a XOR b的計算等同於(a AND (NOT b))或者(NOT a AND ( b))
位運算符
由於比較少用到,這裡只做簡單介紹
位運算符是用來對二進制字節中的位進行測試、移位或者測試處理
MYSQL中提供的位運算有
按位或(|)
按位與(&)
按位異或(^)
按位左移(<<)
按位右移(>>)
按位取反(~):反轉所有比特
TIPS:可以使用BIN()=binary函數查看一個十進制數的二進制表示
例如20這個數字 SELECT BIN(20)
二進制表示為:10100
同樣 sqlserver也是有位運算符的,但是沒有mysql那麼多,如下
DECLARE @i BIT SET @i=0 SELECT @i | 3 AS '按位或' SELECT @i & 3 AS '按位與' SELECT @i ^ 3 AS '按位異或' SELECT ~@i AS '非' SET @i=1 SELECT ~@i AS '非'
特別提示
某一些MYSQL中的特殊字符需要用轉義字符才能插入數據庫,否則產生意料之外的結果。
下面的特殊字符需要在輸入時加反斜線符號開頭
輸入單引號需要:\' 輸入雙引號需要:\'' 輸入反斜槓:\\ 輸入回車符:\r 輸入換行符:\n 輸入制表符:\tab 輸入退格符:\b
在插入這些特殊字符到數據庫之前一定要進行轉義處理
在SQLSERVER裡,這些特殊字符不是在前面加反斜槓\,而是加單引號'
例如插入一個單引號,加了反斜槓,插入成功
INSERT INTO table_1(NAME) VALUES('\'') SELECT * FROM table_1
總結
這一節簡單介紹了MYSQL裡的一些運算符和特殊字符,並且比較了與SQLSERVER的區別