binary操作符將後面的字串拋給乙個二進位制字串。這是一種簡單的方式來促使逐字節而不是逐字元的進行列比較。這使得比較區分大小寫,即使該列不被定義為binary或blob。binary也會產生結尾空白,從而更加顯眼。
mysql>select 'a' = 'a';
-> 1
mysql>select binary 'a' = 'a';
-> 0
mysql>select 'a' = 'a ';
-> 1
mysql>select binary 'a' = 'a ';
-> 0
binary影響整個比較;它可以在任何運算元前被給定,而產生相同的結果。
binarystr是cast(stras binary)的縮略形式。
注意,在一些語境中,假如你將乙個編入索引的列派給binary, mysql將不能有效使用這個索引。
假如你想要將乙個blob值或其它二進位制字串進行區分大小寫的比較,你可利用二進位制字串沒有字符集這一事實實現這個目的,這樣就不會有文書夾的概念。為執行乙個區分大小寫的比較,可使用 convert()函式將乙個字串值轉化為乙個不區分大小寫的字符集。其結果為乙個非二進位制字串,因此like操作也不會區分大小寫:
select 'a' like convert(blob_colusing latin1) fromtbl_name;
若要使用乙個不同的字符集,替換其在上述語句中的latin1名。
convert()一般可用於比較出現在不同字符集中的字串。
cast()和convert()函式可用來獲取乙個型別的值,並產生另乙個型別的值。
這個型別可以是以下值其中的 乙個:
binary產生乙個二進位制字串。關於它怎樣影響比較結果的說明見本章中binary操作符項。
假如給定了隨意長度n,則binary[n]使cast使用該引數的不多於n個位元組。同樣的,char[n]會使cast使用該引數的不多於n個字元。
cast() and convert(... using ...)是標準sql語法。convert()的非using格式是ofis odbc語法。
帶有using的convert()被用來在不同的字符集之間轉化資料。在mysql中,自動解碼名和相應的字符集名稱相同。例如。 這個語句將伺服器的預設字符集中的字串'abc'轉化為utf8字符集中相應的字串:
select convert('abc' using utf8);
當你想要在乙個create ... select語句中建立乙個特殊型別的列,則cast函式會很有用:
create table new_table select cast('2000-01-01' as date);
該函式也用於enum列按詞法順序的排序。通常enum列的排序在使用內部數值時發生。將這些值按照詞法順序派給char結果:
selectenum_colfromtbl_nameorder by cast(enum_colas char);
cast(stras binary)和binarystr相同。cast(expras char)將表示式視為乙個帶有預設字符集的字串。
若用於乙個諸如concat('date: ',cast(now() as date))這樣的比較複雜的表示式的一部分,cast()也會改變結果。
你不應在不同的格式中使用cast()來析取資料,但可以使用諸如left()或extract()的樣的字串函式來代替。請參見12.5節,「日期和時間函式」。
若要在數值語境中將乙個字串派給乙個數值,通常情況下,除了將字串值作為數字使用外,你不需要做任何事:
mysql>select 1+'1';
-> 2
若要在乙個字串語境中使用乙個數字,該數字會被自動轉化為乙個binary字串。
mysql>select concat('hello you ',2);
-> 'hello you 2'
mysql支援帶符號和無符號的64位元值的運算。若你正在使用數字操作符 (如+)而其中乙個運算元為無符號整數,則結果為無符號。可使用signed和unsigned cast操作符來覆蓋它。將運算分別派給帶符號或無符號64位元整數。
mysql>select cast(1-2 as unsigned)
-> 18446744073709551615
mysql>select cast(cast(1-2 as unsigned) as signed);
-> -1
注意,假如任意乙個運算元為乙個浮點值,則結果為乙個浮點值, 且不會受到上述規則影響(關於這一點, decimal列值被視為浮點值)。
mysql>select cast(1 as unsigned) - 2.0;
-> -1.0
若你在乙個算術運算中使用了乙個字串,它會被轉化為乙個浮點數。
MySQL的and操作符和or操作符
有時對where的要篩選的列不止乙個時,那麼就用到了and操作符和or操作符,and操作符顧名思義的意思是 並且 而or操作符的意思是 或者 比如以部門員工表為例 查詢部門編號為d001並且入職日期為 1985 02 02的員工編號,那麼就要用到and操作符 那如果是查詢部門編號為d001或者入職日...
C 四種cast操作符
t expression 或 t expression 函式風格 function style 兩種形式之間沒有本質上的不同。對於具有轉換的簡單型別而言 c 風格轉型工作得很好。然而,這樣的轉換符也能不分皂白地應用於類 class 和類的指標。ansi c 標準定義了四個新的轉換符 reinterp...
前置操作符和後置操作符
操作符可以被過載 全域性函式和成員函式均可以進行過載 過載前置 操作符不需要額外的引數 過載後置 操作符需要乙個int型別的佔位引數 來看乙個例子 include include using namespace std class test intvalue test operator test o...