MySQL 常見函數

jopen 10年前發布 | 13K 次閱讀 MySQL 數據庫服務器

字符串函數


CONCAT(str1,str2,...)

返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。

[sql] view plai
</div> </div>

  1. mysql> SELECT CONCAT('My''S''QL');  
  2.         -> 'MySQL'  
  3.   
  4. mysql> SELECT CONCAT('My'NULL'QL');  
  5.         -> NULL  
  6.   
  7. mysql> SELECT CONCAT(14.3);  
  8.         -> '14.3'  
  9. </ol> </div> </div>


    GROUP_CONCAT函數

    將取得的值用逗號連接。

    [sql] view plai
    </div> </div>

    1. select group_concat(id) from table_name;  
    2. </ol> </div> 得到的結果是(1,2,3,4,5)</div>


      LEFT,RIGHT函數

      left(str,n)或者right(str,n)

      返回字符串最左邊/右邊的n個字符。


      REVERSE函數

      reverse(str)

      返回字符串str,順序與字符順序相反.


      LENGTH函數,CHAR_LENGTH函數

      length(str) char_length(str)

      length: 是計算字段的長度一個漢字是算兩個字符,一個數字或字母算一個字符

      char_length:不管漢字還是數字或者是字母都算是一個字符。


      SUBSTRING()

      SUBSTRING(str,pos,len)

      SUBSTRING(str FROM pos FOR len)

      SUBSTRING(str,pos)

      SUBSTRING(str FROM pos)

      [sql] view plain
      </div> </div>

      1. mysql> SELECT SUBSTRING(‘Quadratically’,5);-> ‘ratically’  
      2. mysql> SELECT SUBSTRING(‘foobarbar’ FROM 4);-> ‘barbar’  
      3. mysql> SELECT SUBSTRING(‘Quadratically’,5,6);-> ‘ratica’  
      4. mysql> SELECT SUBSTRING(‘Sakila’, -3);-> ‘ila’  
      5. mysql> SELECT SUBSTRING(‘Sakila’, -5, 3);-> ‘aki’  
      6. mysql> SELECT SUBSTRING(‘Sakila’ FROM -4 FOR 2);-> ‘ki’  
      7. </ol> </div> </div>


        SUBSTRING_INDEX(str,delim,count)

        返回字符串 str 中在第 count 個出現的分隔符 delim 之前的子串。

        如果 count 是一個正數,返回從最后的(從左邊開始計數)分隔符到左邊所有字符。

        如果 count 是負數,返回從最后的(從右邊開始計數)分隔符到右邊所有字符。 

        mysql>SELECT SUBSTRING_INDEX('www.baidu.com', '.', 2); -> 'www.baidu' 

        mysql> SELECT SUBSTRING_INDEX('www.baidu.com', '.', -2); -> 'baidu.com' 


        LOCATE(substr,str) ,判斷某個字符串是否存在某個標示符
        返回子串 substr 在字符串 str 中第一次出現的位置。如果子串 substr 在 str 中不存在,返回值為 0: 
        mysql> SELECT LOCATE('bar', ‘foobarbar'); 
        -> 4 
        mysql> SELECT LOCATE('xbar', ‘foobar'); 
        -> 0 


        字符串比較函數


        根據,MySQL 會自動將數字轉化為字符串,反之亦然。 

        mysql> SELECT 1+'1';

                -> 2

        mysql> SELECT CONCAT(2,' test');

                -> '2 test'

        若想要將數字明確地轉化為字符串,可使用 CAST() CONCAT()函數:

        mysql> SELECT 38.8, CAST(38.8 AS CHAR);

                -> 38.8, '38.8'

        mysql> SELECT 38.8, CONCAT(38.8);

                -> 38.8, '38.8'

        CAST() 比較可取.

        一般而言若字符串比較中任意一個表達式是區分大小寫的,則執行比較時也區分大小寫。 

        • expr LIKE pat [ESCAPE 'escape-char']
        • </ul>

          模式匹配,使用SQL簡單正規表達式比較。返回1 (TRUE)  0 (FALSE)。 若 expr 或 pat 中任何一個為 NULL,則結果為 NULL

          模式不需要為文字字符串。例如,可以被指定為一個字符串表達式或表列。

          在模式中可以同LIKE一起使用以下兩種通配符:

          字符

          </td>

          說明

          </td> </tr>

          %

          </td>

          匹配任何數目的字符,甚至包括零字符 

          </td> </tr>

          _

          </td>

          只能匹配一種字符

          </td> </tr> </tbody> </table> STRCMP函數</div>

          若所有的字符串均相同,則返回STRCMP(),若根據當前分類次序,第一個參數小于第二個,則返回  -1,其它情況返回 1 

          mysql> SELECT STRCMP('text', 'text2');

                  -> -1

          mysql> SELECT STRCMP('text2', 'text');

                  -> 1

          mysql> SELECT STRCMP('text', 'text');

                  -> 0


          </div>

          控制流函數


          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

          在第一個方案的返回結果中, value=compare-value。而第二個方案的返回結果是第一種情況的真實結果。如果沒有匹配的結果值,則返回結果為ELSE后的結果,如果沒有ELSE 部分,則返回值為 NULL。

          </div>

          IF(expr1,expr2,expr3)函數
          </div>

          如果expr1為True,則返回expr2,否則返回expr3。

          expr1 作為一個整數值進行計算,就是說,假如你正在驗證浮點值或字符串值, 那么應該使用比較運算進行檢驗。

          [sql] view plai
          </div> </div>

          1. mysql> SELECT IF(1>2,2,3);  
          2.         -> 3  
          3.   
          4. mysql> SELECT IF(1<2,'yes ','no');  
          5.         -> 'yes'  
          6.   
          7. mysql> SELECT IF(STRCMP('test','test1'),'no','yes');  
          8.         -> 'no'  
          9. </ol> </div> </div>


            IFNULL(expr1,expr2)

            假如expr1 不為 NULL,則 IFNULL() 的返回值為 expr1; 否則其返回值為 expr2。IFNULL()的返回值是數字或是字符串,具體情況取決于其所使用的語境。這個函數一般用來替換NULL值,因為NULL值是不能參與數值運算的,下面這個語句就可以把NULL值用0來替換。

            [sql] view plaincop
            </div> </div>

            1. mysql> SELECT IFNULL(1,0);  
            2.         -> 1  
            3.   
            4. mysql> SELECT IFNULL(NULL,10);  
            5.         -> 10  
            6.   
            7. mysql> SELECT IFNULL(1/0,10);  
            8.         -> 10  
            9.   
            10. mysql> SELECT IFNULL(1/0,'yes');  
            11.         -> 'yes'  
            12. </ol> </div>
              </div>

              NULLIF(expr1,expr2)

              如果expr1 = expr2 成立,那么返回值為NULL,否則返回值為 expr1。

              這和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。

              [sql] view plaincopy
              </div> </div>

              1. mysql> SELECT NULLIF(1,1);  
              2.         -> NULL  
              3.   
              4. mysql> SELECT NULLIF(1,2);  
              5.         -> 1  
              6. </ol> </div> </div>


                coalesce函數,返回參數中第一個不為空的值

                [sql] view plaincopy
                </div> </div>

                1. select coalesce(a,b,c) from table_name;  
                2. </ol> </div> 如果a不為null,則選擇a;如果a為null ,則選擇b;如果b為null,則選擇c;如果a、b、c都為null,則返回null。</div>


                  GREATEST(value1,value2,...)

                  當有2或多個參數時,返回值為最大(最大值的)參數。比較參數所依據的規律同LEAST()相同。

                  [sql] view plain
                  </div> </div>

                  1. mysql> SELECT GREATEST(2,0);  
                  2.         -> 2  
                  3.   
                  4. mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);  
                  5.         -> 767.0  
                  6.   
                  7. mysql> SELECT GREATEST('B','A','C');  
                  8.         -> 'C'  
                  9. </ol> </div> </div>




                    數學函數


                    </div>

                    ROUND(x)返回離x最近的整數,也就是對x進行四舍五入處理

                    ROUND(x,y)返回x保留到小數點后y位的值,在截取時進行四舍五入處理

                    TRUNCATE(x,y)返回x保留到小數點后y位的值,不進行四舍五入操作

                    符號函數SIGN(x),返回x的符號,正數為1,負數為-1,0為0

                    CEIL(x)和CEILING(x)返回大于或等于x的最小整數

                    FLOOR(x)返回小于或等于x的最大整數

                    RAND()返回0~1內的隨機數


                    類型轉化函數


                    BINARY函數

                    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影響整個比較;它可以在任何操作數前被給定,而產生相同的結果。BINARY str 是CAST(str AS BINARY)的縮略形式。


                    CAST、CONVERT函數

                    cast(expr as type),convert(expr as type),convert(expr using transcoding_name)

                    cast和convert函數用來獲取一個類型值,并轉化為另外一個類型。

                    當需要在create ... select ... 中創建一個特殊類型的列時,cast函數比較有用。

                    create new_table select cast('2012-10-10' as DATE)

                    cast(expr as binary)和binary expr類似。


                    其他函數


                    MD5(str),返回字符串str的MD5值。常用于對應用中的數據進行加密。

                    select MD5('123456')


                    INET_ATON(IP地址),返回IP地址的網絡字節序表示

                    INET_NTOA(num),返回網絡字節序代碼的ip地址。

                     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
                     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
                     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
        sesese色