溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql中有哪些常用函數(shù)

發(fā)布時間:2021-08-03 16:46:19 來源:億速云 閱讀:107 作者:Leah 欄目:數(shù)據(jù)庫

mysql中有哪些常用函數(shù),針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

  • 控制流函數(shù)

  • IFNULL(expr1,expr2)

  • 如果expr1不是NULL,IFNULL()返回expr1,否則它返回expr2。IFNULL()返回一個數(shù)字或字符串值,取決于它被使用的上下文環(huán)境。

    • mysql> select IFNULL(1,0);
              -> 1
      mysql> select IFNULL(0,10);
              -> 0
      mysql> select IFNULL(1/0,10);
              -> 10
      mysql> select IFNULL(1/0,'yes');
              -> 'yes'
  • IF(expr1,expr2,expr3)

  • 如果expr1是TRUE(expr1<>0expr1<>NULL),那么IF()返回expr2,否則它返回expr3。IF()返回一個數(shù)字或字符串值,取決于它被使用的上下文。

    mysql> select IF(1>2,2,3);
            -> 3
    mysql> select IF(1<2,'yes','no');
            -> 'yes'
    mysql> select IF(strcmp('test','test1'),'yes','no');
            -> 'no'

    expr1作為整數(shù)值被計算,它意味著如果你正在測試浮點或字符串值,你應(yīng)該使用一個比較操作來做。

    mysql> select IF(0.1,1,0);
            -> 0
    mysql> select IF(0.1<>0,1,0);
            -> 1

    在上面的第一種情況中,IF(0.1)返回0,因為0.1被變換到整數(shù)值, 導(dǎo)致測試IF(0)。這可能不是你期望的。在第二種情況中,比較測試原來的浮點值看它是否是非零,比較的結(jié)果被用作一個整數(shù)。

  • 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

  • 第一個版本返回result,其中value=compare-value。第二個版本中如果第一個條件為真,返回result。如果沒有匹配的result值,那么結(jié)果在ELSE后的result被返回。如果沒有ELSE部分,那么NULL被返回。

    mysql> SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END;
           -> "one"
    mysql> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END;
           -> "true"
    mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END;
           -> NULL

 數(shù)學(xué)函數(shù)

所有的數(shù)學(xué)函數(shù)在一個出錯的情況下返回NULL

  • -

  • 單目減。改變參數(shù)的符號。

    mysql> select - 2;
    注意,如果這個操作符與一個BIGINT使用,返回值是一個BIGINT!這意味著你應(yīng)該避免在整數(shù)上使用-,那可能有值-2^63!
  • ABS(X)

  • 返回X的絕對值。

    mysql> select ABS(2);
            -> 2
    mysql> select ABS(-32);
            -> 32

    該功能可安全用于BIGINT值。

  • SIGN(X)

  • 返回參數(shù)的符號,為-101,取決于X是否是負數(shù)、零或正數(shù)。

    mysql> select SIGN(-32);
            -> -1
    mysql> select SIGN(0);
            -> 0
    mysql> select SIGN(234);
            -> 1
  • MOD(N,M)


  • %

  • 模 (類似C中的%操作符)。返回NM除的余數(shù)。

    mysql> select MOD(234, 10);
            -> 4
    mysql> select 253 % 7;
            -> 1
    mysql> select MOD(29,9);
            -> 2
    這個函數(shù)可安全用于BIGINT值。
  • FLOOR(X)

  • 返回不大于X的最大整數(shù)值。

     
    mysql> select FLOOR(1.23);
            -> 1
    mysql> select FLOOR(-1.23);
            -> -2
    注意返回值被變換為一個BIGINT!
  • CEILING(X)

  • 返回不小于X的最小整數(shù)值。

    mysql> select CEILING(1.23);
            -> 2
    mysql> select CEILING(-1.23);
            -> -1

    注意返回值被變換為一個BIGINT!

  • ROUND(X)

  • 返回參數(shù)X的四舍五入的一個整數(shù)。

    mysql> select ROUND(-1.23);
            -> -1
    mysql> select ROUND(-1.58);
            -> -2
    mysql> select ROUND(1.58);
            -> 2

    注意返回值被變換為一個BIGINT!

  • ROUND(X,D)

  • 返回參數(shù)X的四舍五入的有D為小數(shù)的一個數(shù)字。如果D0,結(jié)果將沒有小數(shù)點或小數(shù)部分。

    mysql> select ROUND(1.298, 1);
            -> 1.3
    mysql> select ROUND(1.298, 0);
            -> 1

    注意返回值被變換為一個BIGINT!

  • EXP(X)

  • 返回值e(自然對數(shù)的底)的X次方。

    mysql> select EXP(2);
            -> 7.389056
    mysql> select EXP(-2);
            -> 0.135335
  • LOG(X)

  • 返回X的自然對數(shù)。

    mysql> select LOG(2);
            -> 0.693147
    mysql> select LOG(-2);
            -> NULL

    如果你想要一個數(shù)字X的任意底B的對數(shù),使用公式LOG(X)/LOG(B)。

  • LOG10(X)

  • 返回X的以10為底的對數(shù)。

    mysql> select LOG10(2);
            -> 0.301030
    mysql> select LOG10(100);
            -> 2.000000
    mysql> select LOG10(-100);
            -> NULL
  • POW(X,Y)


  • POWER(X,Y)

  • 返回值XY次冪。

    mysql> select POW(2,2);
            -> 4.000000
    mysql> select POW(2,-2);
            -> 0.250000
  • SQRT(X)

  • 返回非負數(shù)X的平方根。

    mysql> select SQRT(4);
            -> 2.000000
    mysql> select SQRT(20);
            -> 4.472136
  • PI()

  • 返回PI的值(圓周率)。

    mysql> select PI();
            -> 3.141593
  • COS(X)

  • 返回X的余弦, 在這里X以弧度給出。

    mysql> select COS(PI());
            -> -1.000000
  • SIN(X)

  • 返回X的正弦值,在此X以弧度給出。

    mysql> select SIN(PI());
            -> 0.000000
  • TAN(X)

  • 返回X的正切值,在此X以弧度給出。

    mysql> select TAN(PI()+1);
            -> 1.557408
  • ACOS(X)

  • 返回X反余弦,即其余弦值是X。如果X不在-11的范圍,返回NULL。

    mysql> select ACOS(1);
            -> 0.000000
    mysql> select ACOS(1.0001);
            -> NULL
    mysql> select ACOS(0);
            -> 1.570796
  • ASIN(X)

  • 返回X反正弦值,即其正弦值是X。L如果X不在-11的范圍,返回NULL。

    mysql> select ASIN(0.2);
            -> 0.201358
    mysql> select ASIN('foo');
            -> 0.000000
  • ATAN(X)

  • 返回X的反正切值,即其正切值是X。

    mysql> select ATAN(2);
            -> 1.107149
    mysql> select ATAN(-2);
            -> -1.107149
  • ATAN2(X,Y)

  • 返回2個變量XY的反正切。它類似于計算Y/X的反正切,除了兩個參數(shù)的符號被用來決定結(jié)果的象限。

    mysql> select ATAN(-2,2);
            -> -0.785398
    mysql> select ATAN(PI(),0);
            -> 1.570796
  • COT(X)

  • 返回X的余切。

    mysql> select COT(12);
            -> -1.57267341
    mysql> select COT(0);
            -> NULL
  • RAND()


  • RAND(N)

  • 返回在范圍01.0內(nèi)的隨機浮點值。如果一個整數(shù)參數(shù)N被指定,它被用作種子值。

    mysql> select RAND();
            -> 0.5925
    mysql> select RAND(20);
            -> 0.1811
    mysql> select RAND(20);
            -> 0.1811
    mysql> select RAND();
            -> 0.2079
    mysql> select RAND();
            -> 0.7888

    你不能在一個ORDER BY子句用RAND()值使用列,因為ORDER BY將重復(fù)計算列多次。然而在MySQL3.23中,你可以做:
    SELECT * FROM table_name ORDER BY RAND(),這是有利于得到一個來自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的隨機樣本。注意在一個WHERE子句里的一個RAND()將在每次WHERE被執(zhí)行時重新評估。

  • LEAST(X,Y,...)

  • 有2和2個以上的參數(shù),返回最小(最小值)的參數(shù)。參數(shù)使用下列規(guī)則進行比較:

    mysql> select LEAST(2,0);
            -> 0
    mysql> select LEAST(34.0,3.0,5.0,767.0);
            -> 3.0
    mysql> select LEAST("B","A","C");
            -> "A"

    MySQL 3.22.5以前的版本,你可以使用MIN()而不是LEAST

    • 如果返回值被使用在一個INTEGER上下文,或所有的參數(shù)都是整數(shù)值,他們作為整數(shù)比較。

    • 如果返回值被使用在一個REAL上下文,或所有的參數(shù)是實數(shù)值,他們作為實數(shù)比較。

    • 如果任何參數(shù)是一個大小敏感的字符串,參數(shù)作為大小寫敏感的字符串被比較。

    • 在其他的情況下,參數(shù)作為大小寫無關(guān)的字符串被比較。

  • GREATEST(X,Y,...)

  • 返回最大(最大值)的參數(shù)。參數(shù)使用與LEAST一樣的規(guī)則進行比較。

    mysql> select GREATEST(2,0);
            -> 2
    mysql> select GREATEST(34.0,3.0,5.0,767.0);
            -> 767.0
    mysql> select GREATEST("B","A","C");
            -> "C"
    在MySQL在 3.22.5 以前的版本, 你能使用MAX()而不是GREATEST.
  • DEGREES(X)

  • 返回參數(shù)X,從弧度變換為角度。

    mysql> select DEGREES(PI());
            -> 180.000000
  • RADIANS(X)

  • 返回參數(shù)X,從角度變換為弧度。

    mysql> select RADIANS(90);
            -> 1.570796
  • TRUNCATE(X,D)

  • 返回數(shù)字X,截斷為D位小數(shù)。如果D0,結(jié)果將沒有小數(shù)點或小數(shù)部分。

    mysql> select TRUNCATE(1.223,1);
            -> 1.2
    mysql> select TRUNCATE(1.999,1);
            -> 1.9
    mysql> select TRUNCATE(1.999,0);
            -> 1
字符串函數(shù)
對于針對字符串位置的操作,第一個位置被標記為1。
  • ASCII(str)

  • 返回字符串str的最左面字符的ASCII代碼值。如果str是空字符串,返回0。如果strNULL,返回NULL。

    mysql> select ASCII('2');
            -> 50
    mysql> select ASCII(2);
            -> 50
    mysql> select ASCII('dx');
            -> 100

    也可參見ORD()函數(shù)。

  • ORD(str)

  • 如果字符串str最左面字符是一個多字節(jié)字符,通過以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代碼值來返回多字節(jié)字符代碼。如果最左面的字符不是一個多字節(jié)字符。返回與ASCII()函數(shù)返回的相同值。

    mysql> select ORD('2');
            -> 50
  • CONV(N,from_base,to_base)

  • 在不同的數(shù)字基之間變換數(shù)字。返回數(shù)字N的字符串數(shù)字,從from_base基變換為to_base基,如果任何參數(shù)是NULL,返回NULL。參數(shù)N解釋為一個整數(shù),但是可以指定為一個整數(shù)或一個字符串。最小基是2且最大的基是36。如果to_base是一個負數(shù),N被認為是一個有符號數(shù),否則,N被當作無符號數(shù)。
    CONV以64位點精度工作。

    mysql> select CONV("a",16,2);
            -> '1010'
    mysql> select CONV("6E",18,8);
            -> '172'
    mysql> select CONV(-17,10,-18);
            -> '-H'
    mysql> select CONV(10+"10"+'10'+0xa,10,10);
            -> '40'
  • BIN(N)

  • 返回二進制值N的一個字符串表示,在此N是一個長整數(shù)(BIGINT)數(shù)字,這等價于CONV(N,10,2)。如果NNULL,返回NULL。

    mysql> select BIN(12);
            -> '1100'
  • OCT(N)

  • 返回八進制值N的一個字符串的表示,在此N是一個長整型數(shù)字,這等價于CONV(N,10,8)。如果N是NULL,返回NULL。

    mysql> select OCT(12);
            -> '14'
  • HEX(N)

  • 返回十六進制值N一個字符串的表示,在此N是一個長整型(BIGINT)數(shù)字,這等價于CONV(N,10,16)。如果NNULL,返回NULL。

    mysql> select HEX(255);
            -> 'FF'
  • CHAR(N,...)

  • CHAR()將參數(shù)解釋為整數(shù)并且返回由這些整數(shù)的ASCII代碼字符組成的一個字符串。NULL值被跳過。

    mysql> select CHAR(77,121,83,81,'76');
            -> 'MySQL'
    mysql> select CHAR(77,77.3,'77.3');
            -> 'MMM'
  • CONCAT(str1,str2,...)

  • 返回來自于參數(shù)連結(jié)的字符串。如果任何參數(shù)是NULL,返回NULL。可以有超過2個的參數(shù)。一個數(shù)字參數(shù)被變換為等價的字符串形式。

    mysql> select CONCAT('My', 'S', 'QL');
            -> 'MySQL'
    mysql> select CONCAT('My', NULL, 'QL');
            -> NULL
    mysql> select CONCAT(14.3);
            -> '14.3'
  • LENGTH(str)


  • OCTET_LENGTH(str)


  • CHAR_LENGTH(str)


  • CHARACTER_LENGTH(str)

  • 返回字符串str的長度。

    mysql> select LENGTH('text');
            -> 4
    mysql> select OCTET_LENGTH('text');
            -> 4

    注意,對于多字節(jié)字符,其CHAR_LENGTH()僅計算一次。

  • LOCATE(substr,str)


  • POSITION(substr IN str)

  • 返回子串substr在字符串str第一個出現(xiàn)的位置,如果substr不是在str里面,返回0.

    mysql> select LOCATE('bar', 'foobarbar');
            -> 4
    mysql> select LOCATE('xbar', 'foobar');
            -> 0
    該函數(shù)是多字節(jié)可靠的。
  • LOCATE(substr,str,pos)

  • 返回子串substr在字符串str第一個出現(xiàn)的位置,從位置pos開始。如果substr不是在str里面,返回0。

    mysql> select LOCATE('bar', 'foobarbar',5);
            -> 7

    這函數(shù)是多字節(jié)可靠的。

  • INSTR(str,substr)

  • 返回子串substr在字符串str中的第一個出現(xiàn)的位置。這與有2個參數(shù)形式的LOCATE()相同,除了參數(shù)被顛倒。

    mysql> select INSTR('foobarbar', 'bar');
            -> 4
    mysql> select INSTR('xbar', 'foobar');
            -> 0

    這函數(shù)是多字節(jié)可靠的。

  • LPAD(str,len,padstr)

  • 返回字符串str,左面用字符串padstr填補直到strlen個字符長。

    mysql> select LPAD('hi',4,'??');
            -> '??hi'
  • RPAD(str,len,padstr)

  • 返回字符串str,右面用字符串padstr填補直到strlen個字符長。  

    mysql> select RPAD('hi',5,'?');
            -> 'hi???'
  • LEFT(str,len)

  • 返回字符串str的最左面len個字符。

    mysql> select LEFT('foobarbar', 5);
            -> 'fooba'

    該函數(shù)是多字節(jié)可靠的。

  • RIGHT(str,len)

  • 返回字符串str的最右面len個字符。

    mysql> select RIGHT('foobarbar', 4);
            -> 'rbar'

    該函數(shù)是多字節(jié)可靠的。

  • SUBSTRING(str,pos,len)


  • SUBSTRING(str FROM pos FOR len)


  • MID(str,pos,len)

  • 從字符串str返回一個len個字符的子串,從位置pos開始。使用FROM的變種形式是ANSI SQL92語法。

    mysql> select SUBSTRING('Quadratically',5,6);
            -> 'ratica'

    該函數(shù)是多字節(jié)可靠的。

  • SUBSTRING(str,pos)


  • SUBSTRING(str FROM pos)

  • 從字符串str的起始位置pos返回一個子串。

    mysql> select SUBSTRING('Quadratically',5);
            -> 'ratically'
    mysql> select SUBSTRING('foobarbar' FROM 4);
            -> 'barbar'

    該函數(shù)是多字節(jié)可靠的。

  • SUBSTRING_INDEX(str,delim,count)

  • 返回從字符串str的第count個出現(xiàn)分隔符delim之后的子串。如果count是正數(shù),返回最后的分隔符到左邊(從左邊數(shù)) 的所有字符。如果count是負數(shù),返回最后的分隔符到右邊的所有字符(從右邊數(shù))。

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

    該函數(shù)對多字節(jié)是可靠的。

  • LTRIM(str)

  • 返回刪除了其前置空格字符的字符串str。

    mysql> select LTRIM('  barbar');
            -> 'barbar'
  • RTRIM(str)

  • 返回刪除了其拖后空格字符的字符串str。

    mysql> select RTRIM('barbar   ');
            -> 'barbar'
    該函數(shù)對多字節(jié)是可靠的。
  • TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)

  • 返回字符串str,其所有remstr前綴或后綴被刪除了。如果沒有修飾符BOTH、LEADINGTRAILING給出,BOTH被假定。如果remstr沒被指定,空格被刪除。

    mysql> select TRIM('  bar   ');
            -> 'bar'
    mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx');
            -> 'barxxx'
    mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx');
            -> 'bar'
    mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz');
            -> 'barx'

    該函數(shù)對多字節(jié)是可靠的。

  • SOUNDEX(str)

  • 返回str的一個同音字符串。聽起來“大致相同”的2個字符串應(yīng)該有相同的同音字符串。一個“標準”的同音字符串長是4個字符,但是SOUNDEX()函數(shù)返回一個任意長的字符串。你可以在結(jié)果上使用SUBSTRING()得到一個“標準”的 同音串。所有非數(shù)字字母字符在給定的字符串中被忽略。所有在A-Z之外的字符國際字母被當作元音。

    mysql> select SOUNDEX('Hello');
            -> 'H400'
    mysql> select SOUNDEX('Quadratically');
            -> 'Q36324'
  • SPACE(N)

  • 返回由N個空格字符組成的一個字符串。

    mysql> select SPACE(6);
            -> '      '
  • REPLACE(str,from_str,to_str)

  • 返回字符串str,其字符串from_str的所有出現(xiàn)由字符串to_str代替。

    mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
            -> 'WwWwWw.mysql.com'

    該函數(shù)對多字節(jié)是可靠的。

  • REPEAT(str,count)

  • 返回由重復(fù)countTimes次的字符串str組成的一個字符串。如果count <= 0,返回一個空字符串。如果strcountNULL,返回NULL

    mysql> select REPEAT('MySQL', 3);
            -> 'MySQLMySQLMySQL'
  • REVERSE(str)

  • 返回顛倒字符順序的字符串str。

    mysql> select REVERSE('abc');
            -> 'cba'

    該函數(shù)對多字節(jié)可靠的。

  • INSERT(str,pos,len,newstr)

  • 返回字符串str,在位置pos起始的子串且len個字符長得子串由字符串newstr代替。

    mysql> select INSERT('Quadratic', 3, 4, 'What');
            -> 'QuWhattic'

    該函數(shù)對多字節(jié)是可靠的。

  • ELT(N,str1,str2,str3,...)

  • 如果N= 1,返回str1,如果N=
    2
    ,返回str2,等等。如果N小于1或大于參數(shù)個數(shù),返回NULLELT()FIELD()反運算。

    mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
            -> 'ej'
    mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
            -> 'foo'
  • FIELD(str,str1,str2,str3,...)

  • 返回strstr1, str2, str3,
    ...
    清單的索引。如果str沒找到,返回0。FIELD()ELT()反運算。

    mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
            -> 2
    mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
            -> 0
  • FIND_IN_SET(str,strlist)

  • 如果字符串str在由N子串組成的表strlist之中,返回一個1N的值。一個字符串表是被“,”分隔的子串組成的一個字符串。如果第一個參數(shù)是一個常數(shù)字符串并且第二個參數(shù)是一種類型為SET的列,FIND_IN_SET()函數(shù)被優(yōu)化而使用位運算!如果str不是在strlist里面或如果strlist是空字符串,返回0。如果任何一個參數(shù)是NULL,返回NULL。如果第一個參數(shù)包含一個“,”,該函數(shù)將工作不正常。

    mysql> SELECT FIND_IN_SET('b','a,b,c,d');
            -> 2
  • MAKE_SET(bits,str1,str2,...)

  • 返回一個集合 (包含由“,”字符分隔的子串組成的一個字符串),由相應(yīng)的位在bits集合中的的字符串組成。str1對應(yīng)于位0,str2對應(yīng)位1,等等。在str1,
    str2, ...中的NULL串不添加到結(jié)果中。

    mysql> SELECT MAKE_SET(1,'a','b','c');
            -> 'a'
    mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
            -> 'hello,world'
    mysql> SELECT MAKE_SET(0,'a','b','c');
            -> ''
  • EXPORT_SET(bits,on,off,[separator,[number_of_bits]])

  • 返回一個字符串,在這里對于在“bits”中設(shè)定每一位,你得到一個“on”字符串,并且對于每個復(fù)位(reset)的位,你得到一個“off”字符串。每個字符串用“separator”分隔(缺省“,”),并且只有“bits”的“number_of_bits” (缺省64)位被使用。

    mysql> select EXPORT_SET(5,'Y','N',',',4)
            -> Y,N,Y,N
  • LCASE(str)


  • LOWER(str)

  • 返回字符串str,根據(jù)當前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改變成小寫。該函數(shù)對多字節(jié)是可靠的。

    mysql> select LCASE('QUADRATICALLY');
            -> 'quadratically'
  • UCASE(str)


  • UPPER(str)

  • 返回字符串str,根據(jù)當前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改變成大寫。該函數(shù)對多字節(jié)是可靠的。

    mysql> select UCASE('Hej');
            -> 'HEJ'

    該函數(shù)對多字節(jié)是可靠的。

  • LOAD_FILE(file_name)

  • 讀入文件并且作為一個字符串返回文件內(nèi)容。文件必須在服務(wù)器上,你必須指定到文件的完整路徑名,而且你必須有file權(quán)限。文件必須所有內(nèi)容都是可讀的并且小于max_allowed_packet。如果文件不存在或由于上面原因之一不能被讀出,函數(shù)返回NULL。

    mysql> UPDATE table_name
               SET blob_column=LOAD_FILE("/tmp/picture")
               WHERE id=1;
MySQL必要時自動變換數(shù)字為字符串,并且反過來也如此:
mysql> SELECT 1+"1";
        -> 2
mysql> SELECT CONCAT(2,' test');
        -> '2 test'
如果你想要明確地變換一個數(shù)字到一個字符串,把它作為參數(shù)傳遞到CONCAT()。
如果字符串函數(shù)提供一個二進制字符串作為參數(shù),結(jié)果字符串也是一個二進制字符串。被變換到一個字符串的數(shù)字被當作是一個二進制字符串。這僅影響比較。
 
 
 
日期和時間函數(shù)
 
 
對于每個類型擁有的值范圍以及并且指定日期何時間值的有效格式的描述見7.3.6 日期和時間類型。
這里是一個使用日期函數(shù)的例子。下面的查詢選擇了所有記錄,其date_col的值是在最后30天以內(nèi):
mysql> SELECT something FROM table
           WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
  • DAYOFWEEK(date)

  • 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。這些索引值對應(yīng)于ODBC標準。

    mysql> select DAYOFWEEK('1998-02-03');
            -> 3
  • WEEKDAY(date)

  • 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

    mysql> select WEEKDAY('1997-10-04 22:23:00');
            -> 5
    mysql> select WEEKDAY('1997-11-05');
            -> 2
  • DAYOFMONTH(date)

  • 返回date的月份中日期,在131范圍內(nèi)。

    mysql> select DAYOFMONTH('1998-02-03');
            -> 3
  • DAYOFYEAR(date)

  • 返回date在一年中的日數(shù), 在1366范圍內(nèi)。

    mysql> select DAYOFYEAR('1998-02-03');
            -> 34
  • MONTH(date)

  • 返回date的月份,范圍112。

    mysql> select MONTH('1998-02-03');
            -> 2
  • DAYNAME(date)

  • 返回date的星期名字。

    mysql> select DAYNAME("1998-02-05");
            -> 'Thursday'
  • MONTHNAME(date)

  • 返回date的月份名字。

    mysql> select MONTHNAME("1998-02-05");
            -> 'February'
  • QUARTER(date)

  • 返回date一年中的季度,范圍14。

    mysql> select QUARTER('98-04-01');
            -> 2
  • WEEK(date)


  • WEEK(date,first)

  • 對于星期天是一周的第一天的地方,有一個單個參數(shù),返回date的周數(shù),范圍在052。2個參數(shù)形式WEEK()允許你指定星期是否開始于星期天或星期一。如果第二個參數(shù)是0,星期從星期天開始,如果第二個參數(shù)是1,從星期一開始。

    mysql> select WEEK('1998-02-20');
            -> 7
    mysql> select WEEK('1998-02-20',0);
            -> 7
    mysql> select WEEK('1998-02-20',1);
            -> 8
  • YEAR(date)

  • 返回date的年份,范圍在10009999

    mysql> select YEAR('98-02-03');
            -> 1998
  • HOUR(time)

  • 返回time的小時,范圍是023

    mysql> select HOUR('10:05:03');
            -> 10
  • MINUTE(time)

  • 返回time的分鐘,范圍是059

    mysql> select MINUTE('98-02-03 10:05:03');
            -> 5
  • SECOND(time)

  • 回來time的秒數(shù),范圍是059。

    mysql> select SECOND('10:05:03');
            -> 3
  • PERIOD_ADD(P,N)

  • 增加N個月到階段P(以格式YYMMYYYYMM)。以格式YYYYMM返回值。注意階段參數(shù)P不是日期值。

    mysql> select PERIOD_ADD(9801,2);
            -> 199803
  • PERIOD_DIFF(P1,P2)

  • 返回在時期P1P2之間月數(shù),P1P2應(yīng)該以格式YYMMYYYYMM。注意,時期參數(shù)P1P2不是日期值。

    mysql> select PERIOD_DIFF(9802,199703);
            -> 11
  • DATE_ADD(date,INTERVAL expr type)


  • DATE_SUB(date,INTERVAL expr type)


  • ADDDATE(date,INTERVAL expr type)


  • SUBDATE(date,INTERVAL expr type)

  • 這些功能執(zhí)行日期運算。對于MySQL 3.22,他們是新的。ADDDATE()SUBDATE()DATE_ADD()DATE_SUB()的同義詞。在MySQL 3.23中,你可以使用+-而不是DATE_ADD()DATE_SUB()。(見例子)date是一個指定開始日期的DATETIMEDATE值,expr是指定加到開始日期或從開始日期減去的間隔值一個表達式,expr是一個字符串;它可以以一個“-”開始表示負間隔。type是一個關(guān)鍵詞,指明表達式應(yīng)該如何被解釋。EXTRACT(type
    FROM date)
    函數(shù)從日期中返回“type”間隔。下表顯示了typeexpr參數(shù)怎樣被關(guān)聯(lián):

    type含義期望的expr格式
    SECONDSECONDS
    MINUTE分鐘MINUTES
    HOUR時間HOURS
    DAYDAYS
    MONTHMONTHS
    YEARYEARS
    MINUTE_SECOND分鐘和秒"MINUTES:SECONDS"
    HOUR_MINUTE小時和分鐘"HOURS:MINUTES"
    DAY_HOUR天和小時"DAYS HOURS"
    YEAR_MONTH年和月"YEARS-MONTHS"
    HOUR_SECOND小時, 分鐘,"HOURS:MINUTES:SECONDS"
    DAY_MINUTE天, 小時, 分鐘"DAYS HOURS:MINUTES"
    DAY_SECOND天, 小時, 分鐘, 秒"DAYS HOURS:MINUTES:SECONDS"

    MySQLexpr格式中允許任何標點分隔符。表示顯示的是建議的分隔符。如果date參數(shù)是一個DATE值并且你的計算僅僅包含YEAR、MONTHDAY部分(即,沒有時間部分),結(jié)果是一個DATE值。否則結(jié)果是一個DATETIME值。

    mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
            -> 1998-01-01 00:00:00
    mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
            -> 1998-01-01
    mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
           -> 1997-12-31 23:59:59 
    mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
                           INTERVAL 1 SECOND);
            -> 1998-01-01 00:00:00
    mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
                           INTERVAL 1 DAY);
            -> 1998-01-01 23:59:59
    mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
                           INTERVAL "1:1" MINUTE_SECOND);
            -> 1998-01-01 00:01:00
    mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
                           INTERVAL "1 1:1:1" DAY_SECOND);
            -> 1997-12-30 22:58:59
    mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
                           INTERVAL "-1 10" DAY_HOUR);
            -> 1997-12-30 14:00:00
    mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
            -> 1997-12-02
    mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
           -> 1999
    mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
           -> 199907
    mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
           -> 20102

    如果你指定太短的間隔值(不包括type關(guān)鍵詞期望的間隔部分),MySQL假設(shè)你省掉了間隔值的最左面部分。例如,如果你指定一個typeDAY_SECOND,值expr被希望有天、小時、分鐘和秒部分。如果你象"1:10"這樣指定值,MySQL假設(shè)日子和小時部分是丟失的并且值代表分鐘和秒。換句話說,"1:10"
    DAY_SECOND
    以它等價于"1:10" MINUTE_SECOND的方式解釋,這對那MySQL解釋TIME值表示經(jīng)過的時間而非作為一天的時間的方式有二義性。如果你使用確實不正確的日期,結(jié)果是NULL。如果你增加MONTH、YEAR_MONTHYEAR并且結(jié)果日期大于新月份的最大值天數(shù),日子在新月用最大的天調(diào)整。

    mysql> select DATE_ADD('1998-01-30', Interval 1 month);
            -> 1998-02-28
    注意,從前面的例子中詞INTERVAL和type關(guān)鍵詞不是區(qū)分大小寫的。
  • TO_DAYS(date)

  • 給出一個日期date,返回一個天數(shù)(從0年的天數(shù))。

    mysql> select TO_DAYS(950501);
            -> 728779
    mysql> select TO_DAYS('1997-10-07');
            -> 729669

    TO_DAYS()不打算用于使用格列高里歷(1582)出現(xiàn)前的值。

  • FROM_DAYS(N)

  • 給出一個天數(shù)N,返回一個DATE值。

    mysql> select FROM_DAYS(729669);
            -> '1997-10-07'

    TO_DAYS()不打算用于使用格列高里歷(1582)出現(xiàn)前的值。

  • DATE_FORMAT(date,format)

  • 根據(jù)format字符串格式化date值。下列修飾符可以被用在format字符串中:

    %M月名字(January……December)
    %W星期名字(Sunday……Saturday)
    %D有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。)
    %Y年, 數(shù)字, 4 位
    %y年, 數(shù)字, 2 位
    %a縮寫的星期名字(Sun……Sat)
    %d月份中的天數(shù), 數(shù)字(00……31)
    %e月份中的天數(shù), 數(shù)字(0……31)
    %m月, 數(shù)字(01……12)
    %c月, 數(shù)字(1……12)
    %b縮寫的月份名字(Jan……Dec)
    %j一年中的天數(shù)(001……366)
    %H小時(00……23)
    %k小時(0……23)
    %h小時(01……12)
    %I小時(01……12)
    %l小時(1……12)
    %i分鐘, 數(shù)字(00……59)
    %r時間,12 小時(hh:mm:ss [AP]M)
    %T時間,24 小時(hh:mm:ss)
    %S秒(00……59)
    %s秒(00……59)
    %pAMPM
    %w一個星期中的天數(shù)(0=Sunday ……6=Saturday )
    %U星期(0……52), 這里星期天是星期的第一天
    %u星期(0……52), 這里星期一是星期的第一天
    %%一個文字“%”。

    所有的其他字符不做解釋被復(fù)制到結(jié)果中。

    mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
            -> 'Saturday October 1997'
    mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
            -> '22:23:00'
    mysql> select DATE_FORMAT('1997-10-04 22:23:00',
                              '%D %y %a %d %m %b %j');
            -> '4th 97 Sat 04 10 Oct 277'
    mysql> select DATE_FORMAT('1997-10-04 22:23:00',
                              '%H %k %I %r %T %S %w');
            -> '22 22 10 10:23:00 PM 22:23:00 00 6'

    MySQL3.23中,在格式修飾符字符前需要%。在MySQL更早的版本中,%是可選的。

  • TIME_FORMAT(time,format)

  • 這象上面的DATE_FORMAT()函數(shù)一樣使用,但是format字符串只能包含處理小時、分鐘和秒的那些格式修飾符。其他修飾符產(chǎn)生一個NULL值或0。

  • CURDATE()


  • CURRENT_DATE

  • 'YYYY-MM-DD'YYYYMMDD格式返回今天日期值,取決于函數(shù)是在一個字符串還是數(shù)字上下文被使用。

    mysql> select CURDATE();
            -> '1997-12-15'
    mysql> select CURDATE() + 0;
            -> 19971215
  • CURTIME()


  • CURRENT_TIME

  • 'HH:MM:SS'HHMMSS格式返回當前時間值,取決于函數(shù)是在一個字符串還是在數(shù)字的上下文被使用。

    mysql> select CURTIME();
            -> '23:50:26'
    mysql> select CURTIME() + 0;
            -> 235026
  • NOW()


  • SYSDATE()


  • CURRENT_TIMESTAMP

  • 'YYYY-MM-DD HH:MM:SS'YYYYMMDDHHMMSS格式返回當前的日期和時間,取決于函數(shù)是在一個字符串還是在數(shù)字的上下文被使用。

    mysql> select NOW();
            -> '1997-12-15 23:50:26'
    mysql> select NOW() + 0;
            -> 19971215235026
  • UNIX_TIMESTAMP()


  • UNIX_TIMESTAMP(date)

  • 如果沒有參數(shù)調(diào)用,返回一個Unix時間戳記(從'1970-01-01 00:00:00'GMT開始的秒數(shù))。如果UNIX_TIMESTAMP()用一個date參數(shù)被調(diào)用,它返回從'1970-01-01 00:00:00' GMT開始的秒數(shù)值。date可以是一個DATE字符串、一個DATETIME字符串、一個TIMESTAMP或以YYMMDDYYYYMMDD格式的本地時間的一個數(shù)字。

    mysql> select UNIX_TIMESTAMP();
            -> 882226357
    mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
            -> 875996580

    UNIX_TIMESTAMP被用于一個TIMESTAMP列,函數(shù)將直接接受值,沒有隱含的“string-to-unix-timestamp”變換。

  • FROM_UNIXTIME(unix_timestamp)

  • 'YYYY-MM-DD HH:MM:SS'YYYYMMDDHHMMSS格式返回unix_timestamp參數(shù)所表示的值,取決于函數(shù)是在一個字符串還是或數(shù)字上下文中被使用。

    mysql> select FROM_UNIXTIME(875996580);
            -> '1997-10-04 22:23:00'
    mysql> select FROM_UNIXTIME(875996580) + 0;
            -> 19971004222300
  • FROM_UNIXTIME(unix_timestamp,format)

  • 返回表示 Unix 時間標記的一個字符串,根據(jù)format字符串格式化。format可以包含與DATE_FORMAT()函數(shù)列出的條目同樣的修飾符。

    mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
                                '%Y %D %M %h:%i:%s %x');
            -> '1997 23rd December 03:43:30 x'
  • SEC_TO_TIME(seconds)

  • 返回seconds參數(shù),變換成小時、分鐘和秒,值以'HH:MM:SS'HHMMSS格式化,取決于函數(shù)是在一個字符串還是在數(shù)字上下文中被使用。

    mysql> select SEC_TO_TIME(2378);
            -> '00:39:38'
    mysql> select SEC_TO_TIME(2378) + 0;
            -> 3938
  • TIME_TO_SEC(time)

  • 返回time參數(shù),轉(zhuǎn)換成秒。

    mysql> select TIME_TO_SEC('22:23:00');
            -> 80580
    mysql> select TIME_TO_SEC('00:39:38');
            -> 2378
 
 
其他函數(shù)

  • DATABASE()

  • 返回當前的數(shù)據(jù)庫名字。

    mysql> select DATABASE();
            -> 'test'

    如果沒有當前的數(shù)據(jù)庫,DATABASE()返回空字符串。

  • USER()


  • SYSTEM_USER()


  • SESSION_USER()

  • 返回當前MySQL用戶名。

    mysql> select USER();
            -> 'davida@localhost'

    在MySQL 3.22.11或以后版本中,這包括用戶名和客戶主機名。你可以象這樣只提取用戶名部分(值是否包括主機名部分均可工作):

    mysql> select substring_index(USER(),"@",1);
            -> 'davida'
  • PASSWORD(str)

  • 從純文本口令str計算一個口令字符串。該函數(shù)被用于為了在user授權(quán)表的Password列中存儲口令而加密MySQL口令。

    mysql> select PASSWORD('badpwd');
            -> '7f84554057dd964b'

    PASSWORD()加密是非可逆的。PASSWORD()不以與Unix口令加密的相同的方法執(zhí)行口令加密。你不應(yīng)該假定如果你的Unix 口令和你的MySQL口令是一樣的,PASSWORD()將導(dǎo)致與在Unix口令文件存儲的相同的加密值。見ENCRYPT()。

  • ENCRYPT(str[,salt])

  • 使用Unix crypt()系統(tǒng)調(diào)用加密str。salt參數(shù)應(yīng)該是一個有2個字符的字符串。(MySQL 3.22.16中,salt可以長于2個字符。)

    mysql> select ENCRYPT("hello");
            -> 'VxuFAJXVARROc'

    如果crypt()在你的系統(tǒng)上不可用,ENCRYPT()總是返回NULL。ENCRYPT()只保留str起始8個字符而忽略所有其他,至少在某些系統(tǒng)上是這樣。這將由底層的crypt()系統(tǒng)調(diào)用的行為決定。

  • ENCODE(str,pass_str)

  • 使用pass_str作為口令加密str。為了解密結(jié)果,使用DECODE()。結(jié)果是一個二進制字符串,如果你想要在列中保存它,使用一個BLOB列類型。

  • DECODE(crypt_str,pass_str)

  • 使用pass_str作為口令解密加密的字符串crypt_strcrypt_str應(yīng)該是一個由ENCODE()返回的字符串。

  • MD5(string)

  • 對字符串計算MD5校驗和。值作為一個32長的十六進制數(shù)字被返回可以,例如用作哈希(hash)鍵。

    mysql> select MD5("testing")
            -> 'ae2b1fca515949e5d54fb22b8ed95575'

    這是一個“RSA數(shù)據(jù)安全公司的MD5消息摘要算法”。

  • LAST_INSERT_ID([expr])

  • 返回被插入一個AUTO_INCREMENT列的最后一個自動產(chǎn)生的值。見20.4.29 mysql_insert_id()。

    mysql> select LAST_INSERT_ID();
            -> 195

    產(chǎn)生的最后ID以每個連接為基礎(chǔ)在服務(wù)器被維護,它不會被其他客戶改變。如果你更新另外一個有非魔術(shù)值(即,不是NULL和不是0的一個值)的AUTO_INCREMENT列,它甚至不會被改變。如果expr作為一個參數(shù)在一個UPDATE子句的LAST_INSERT_ID()里面給出,那么參數(shù)值作為一個LAST_INSERT_ID()值被返回。這可以用來模仿順序:首先創(chuàng)建表:

    mysql> create table sequence (id int not null);
    mysql> insert into sequence values (0);

    然后表能被用來產(chǎn)生順序號,象這樣:

    mysql> update sequence set id=LAST_INSERT_ID(id+1);

    你可以不調(diào)用LAST_INSERT_ID()而產(chǎn)生順序,但是這樣使用函數(shù)的實用程序在服務(wù)器上自動維護ID值作為最后自動產(chǎn)生的值。你可以檢索新的ID值,就像你能讀入正常MySQL中的任何正常的AUTO_INCREMENT值一樣。例如,LAST_INSERT_ID()(沒有一個參數(shù) )將返回新ID。C API函數(shù)mysql_insert_id()也可被用來得到值。

  • FORMAT(X,D)

  • 格式化數(shù)字X為類似于格式'#,###,###.##',四舍五入到D為小數(shù)。如果D0,結(jié)果將沒有小數(shù)點和小數(shù)部分。

    mysql> select FORMAT(12332.123456, 4);
            -> '12,332.1235'
    mysql> select FORMAT(12332.1,4);
            -> '12,332.1000'
    mysql> select FORMAT(12332.2,0);
            -> '12,332'
  • VERSION()

  • 返回表明MySQL服務(wù)器版本的一個字符串。

    mysql> select VERSION();
            -> '3.22.19b-log'
  • GET_LOCK(str,timeout)

  • 試圖獲得由字符串str給定的一個名字的鎖定,第二個timeout為超時。如果鎖定成功獲得,返回1,如果嘗試超時了,返回0,或如果發(fā)生一個錯誤,返回NULL(例如從存儲器溢出或線程用mysqladmin kill被殺死)。當你執(zhí)行RELEASE_LOCK()時、執(zhí)行一個新的GET_LOCK()或線程終止時,一個鎖定被釋放。該函數(shù)可以用來實現(xiàn)應(yīng)用鎖或模擬記錄鎖,它阻止其他客戶用同樣名字的鎖定請求;贊成一個給定的鎖定字符串名字的客戶可以使用字符串執(zhí)行子協(xié)作建議的鎖定。

    mysql> select GET_LOCK("lock1",10);
            -> 1
    mysql> select GET_LOCK("lock2",10);
            -> 1
    mysql> select RELEASE_LOCK("lock2");
            -> 1
    mysql> select RELEASE_LOCK("lock1");
            -> NULL

    注意,第二個RELEASE_LOCK()調(diào)用返回NULL,因為鎖"lock1"自動地被第二個GET_LOCK()調(diào)用釋放。

  • RELEASE_LOCK(str)

  • 釋放字符串str命名的通過GET_LOCK()獲得的鎖。如果鎖被釋放,返回1,如果鎖沒被這個線程鎖定(在此情況下鎖沒被釋放)返回0,并且如果命名的鎖不存在,返回NULL。如果鎖從來沒有通過調(diào)用GET_LOCK()獲得或如果它已經(jīng)被釋放了,鎖將不存在。

  • BENCHMARK(count,expr)

  • BENCHMARK()函數(shù)重復(fù)countTimes次執(zhí)行表達式expr,它可以用于計時MySQL處理表達式有多快。結(jié)果值總是0。意欲用于mysql客戶,它報告查詢的執(zhí)行時間。

    mysql> select BENCHMARK(1000000,encode("hello","goodbye"));
    +----------------------------------------------+
    | BENCHMARK(1000000,encode("hello","goodbye")) |
    +----------------------------------------------+
    |                                            0 |
    +----------------------------------------------+
    1 row in set (4.74 sec)

    報告的時間是客戶端的經(jīng)過時間,不是在服務(wù)器端的CPU時間。執(zhí)行BENCHMARK()若干次可能是明智的,并且注意服務(wù)器機器的負載有多重來解釋結(jié)果。


GROUP BY子句一起使用的函數(shù)

如果你在不包含GROUP BY子句的一個語句中使用聚合函數(shù),它等價于聚合所有行。

  • COUNT(expr)

  • 返回由一個SELECT語句檢索出來的行的非NULL值的數(shù)目。

    mysql> select student.student_name,COUNT(*)
               from student,course
               where student.student_id=course.student_id
               GROUP BY student_name;

    COUNT(*)在它返回的檢索出來的行數(shù)目上有些不同,不管他們是否包含NULL值。如果SELECT從一個表檢索,或沒有檢索出其他列并且沒有WHERE子句,COUNT(*)被優(yōu)化以便快速地返回。例如:

    mysql> select COUNT(*) from student;
  • COUNT(DISTINCT expr,[expr...])

  • 返回一個不同值的數(shù)目。

    mysql> select COUNT(DISTINCT results) from student;

    MySQL中,你可以通過給出一個表達式列表以得到不同的表達式組合的數(shù)目。在 ANSI SQL中,你可能必須在CODE(DISTINCT ..)內(nèi)進行所有表達式的連接。

  • AVG(expr)

  • 返回expr的平均值。

    mysql> select student_name, AVG(test_score)
               from student
               GROUP BY student_name;
  • MIN(expr)


  • MAX(expr)

  • 返回expr的最小或最大值。MIN()MAX()可以有一個字符串參數(shù);在這種的情況下,他們返回最小或最大的字符串值。

    mysql> select student_name, MIN(test_score), MAX(test_score)
               from student
               GROUP BY student_name;
  • SUM(expr)

  • 返回expr的和。注意,如果返回的集合沒有行,它返回NULL!

  • STD(expr)


  • STDDEV(expr)

  • 返回expr標準差(deviation)。這是對 ANSI SQL 的擴展。該函數(shù)的形式STDDEV()是提供與Oracle的兼容性。

  • BIT_OR(expr)

  • 返回expr里所有位的位或。計算用 64 位(BIGINT)精度進行。

  • BIT_AND(expr)

  • 返回expr里所有位的位與。計算用 64 位(BIGINT)精度進行。

MySQL擴展了GROUP BY的用法。你可以不出現(xiàn)在的GROUP BY部分的SELECT表達式中使用列或計算,這表示這個組的任何可能值。你可以使用它是性能更好,避免在不必要的項目上排序和分組。例如,你在下列查詢中不需要在customer.name上聚合:

mysql> select order.custid,customer.name,max(payments)
       from order,customer
       where order.custid = customer.custid
       GROUP BY order.custid;

在 ANSI SQL中,你將必須將customer.name加到GROUP BY子句。在MySQL中,名字是冗余的。

如果你從GROUP BY部分省略的列在組中不是唯一的,不要使用這個功能。

在某些情況下,你可以使用MIN()MAX()獲得一個特定的列值,即使它不是唯一的。下例給出從包含sort列中最小值的行的column值:

substr(MIN(concat(sort,space(6-length(sort)),column),7,length(column)))

注意,如果你正在使用MySQL 3.22(或更早)或如果你正在試圖遵從ANSI SQL,你不能在GROUP BYORDER BY子句中使用表達式。你可以通過使用表達式的一個別名解決此限制:

mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
           GROUP BY id,val ORDER BY val;

MySQL3.23中,你可以這樣做:

mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND();


關(guān)于mysql中有哪些常用函數(shù)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI