|  |  |   Auszug aus dem off. MySQL Handbuch! (z.B. auf dt. Kapitel 7.3)  
     A select_expressionorwhere_definitionin a SQL 
  statement can consist of any expression using the functions described below.  An expression that contains NULLalways produces aNULLvalue unless otherwise indicated in the documentation for the operators and 
  functions involved in the expression.  NOTE: There must be no whitespace between a function name 
  and the parenthesis following it. This helps the MySQL parser distinguish between 
  function calls and references to tables or columns that happen to have the same 
  name as a function. Spaces around arguments are permitted, though.   You can force MySQL to accept spaces after the function name by starting mysqldwith--ansior using theCLIENT_IGNORE_SPACEtomysql_connect(), 
  but in this case all function names will become reserved words. See section 
  1.4.3 Running MySQL in ANSI Mode.  For the sake of brevity, examples display the output from the mysqlprogram in abbreviated form. So this: 
mysql> select MOD(29,9);
1 rows in set (0.00 sec)
+-----------+
| mod(29,9) |
+-----------+
|         2 |
+-----------+
  is displayed like this:  
mysql> select MOD(29,9);
        -> 2
        
( ... )
  Use parenthesis to force the order of evaluation in an expression. For example: 
 
mysql> select 1+2*3;
        -> 7
mysql> select (1+2)*3;
        -> 9
        Comparison operations result in a value of 1(TRUE),0(FALSE), orNULL. These functions work for both numbers and strings. 
  Strings are automatically converted to numbers and numbers to strings as needed 
  (as in Perl).  MySQL performs comparisons using the following rules: 
 
   If one or both arguments are NULL, the result of the comparison 
    isNULL, except for the<=>operator. If both arguments in a comparison operation are strings, they are compared 
    as strings. 
   If both arguments are integers, they are compared as integers. 
   Hexadecimal values are treated as binary strings if not compared to a number. 
     If one of the arguments is 
    a TIMESTAMPorDATETIMEcolumn and the other argument 
    is a constant, the constant is converted to a timestamp before the comparison 
    is performed. This is done to be more ODBC-friendly. In all other cases, the arguments are compared as floating-point (real) 
    numbers. 
  By default, string comparisons are done in case-independent fashion using 
  the current character set (ISO-8859-1 Latin1 by default, which also works excellently 
  for English).   The examples below illustrate conversion of strings to numbers for comparison 
  operations:  
mysql> SELECT 1 > '6x';
         -> 0
mysql> SELECT 7 > '6x';
         -> 1
mysql> SELECT 0 > 'x6';
         -> 0
mysql> SELECT 0 = 'x6';
         -> 1
 
  =   Equal: 
    
mysql> select 1 = 0;
        -> 0
mysql> select '0' = 0;
        -> 1
mysql> select '0.0' = 0;
        -> 1
mysql> select '0.01' = 0;
        -> 0
mysql> select '.01' = 0.01;
        -> 1
<> 
  != Not equal: 
    
mysql> select '.01' <> '0.01';
        -> 1
mysql> select .01 <> '0.01';
        -> 0
mysql> select 'zapp' <> 'zappp';
        -> 1
<= Less than or equal: 
    
mysql> select 0.1 <= 2;
        -> 1
< Less than: 
    
mysql> select 2 < 2;
        -> 0
>= Greater than or equal: 
    
mysql> select 2 >= 2;
        -> 1
> Greater than: 
    
mysql> select 2 > 2;
        -> 0
<=> Null safe equal: 
    
mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1 1 0
IS NULL 
  IS NOT NULL Test whether or not a value is or is not NULL:
mysql> select 1 IS NULL, 0 IS NULL, NULL IS NULL;
        -> 0 0 1
mysql> select 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
        -> 1 1 0
expr BETWEEN min AND max If expris greater than or equal tominandexpris less than or equal tomax,BETWEENreturns1, 
    otherwise it returns0. This is equivalent to the expression(min <= expr AND expr <= max)if all the arguments are 
    of the same type. The first argument (expr) determines how the 
    comparison is performed as follows:
       If expris aTIMESTAMP,DATE, 
        orDATETIMEcolumn,MIN()andMAX()are formatted to the same format if they are constants. If expris a case-insensitive string expression, a case-insensitive 
        string comparison is done. If expris a case-sensitive string expression, a case-sensitive 
        string comparison is done. If expris an integer expression, an integer comparison 
        is done. Otherwise, a floating-point (real) comparison is done. 
     
mysql> select 1 BETWEEN 2 AND 3;
        -> 0
mysql> select 'b' BETWEEN 'a' AND 'c';
        -> 1
mysql> select 2 BETWEEN 2 AND '3';
        -> 1
mysql> select 2 BETWEEN 2 AND 'x-3';
        -> 0
expr IN (value,...) Returns 1ifexpris any of the values in theINlist, else returns0. If all values are constants, 
    then all values are evaluated according to the type ofexprand 
    sorted. The search for the item is then done using a binary search. This meansINis very quick if theINvalue list consists entirely 
    of constants. Ifexpris a case-sensitive string expression, 
    the string comparison is performed in case-sensitive fashion:
mysql> select 2 IN (0,3,5,'wefwf');
        -> 0
mysql> select 'wefwf' IN (0,3,5,'wefwf');
        -> 1
expr NOT IN (value,...) Same as NOT (expr IN (value,...)).ISNULL(expr) If exprisNULL,ISNULL()returns1, otherwise it returns0:
mysql> select ISNULL(1+1);
        -> 0
mysql> select ISNULL(1/0);
        -> 1
Note that a comparison ofNULLvalues using=will 
    always be false!COALESCE(list) Returns first non-NULLelement in list:
mysql> select COALESCE(NULL,1);
        -> 1
mysql> select COALESCE(NULL,NULL,NULL);
        -> NULL
INTERVAL(N,N1,N2,N3,...) Returns 0ifN<N1,1ifN<N2and so on. All arguments are treated 
    as integers. It is required thatN1<N2<N3<...<Nnfor this function 
    to work correctly. This is because a binary search is used (very fast):
mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
mysql> select INTERVAL(10, 1, 10, 100, 1000);
        -> 2
mysql> select INTERVAL(22, 23, 30, 44, 200);
        -> 0
  If you are comparing case sensitive string with any of the standard operators 
  (=,<>..., but notLIKE) end 
  space will be ignored. 
mysql> select "a" ="A ";
        -> 1
     All logical functions return 1(TRUE),0(FALSE) 
  orNULL(unknown, which is in most cases the same as FALSE):  
  NOT   
  ! Logical NOT. Returns 1if the argument is0, 
    otherwise returns0. Exception:NOT NULLreturnsNULL:
mysql> select NOT 1;
        -> 0
mysql> select NOT NULL;
        -> NULL
mysql> select ! (1+1);
        -> 0
mysql> select ! 1+1;
        -> 1
The last example returns1because the expression evaluates the 
    same way as(!1)+1.OR 
  || Logical OR. Returns 1if either argument is not0and notNULL:
mysql> select 1 || 0;
        -> 1
mysql> select 0 || 0;
        -> 0
mysql> select 1 || NULL;
        -> 1
AND 
  && Logical AND. Returns 0if either argument is0orNULL, otherwise returns1:
mysql> select 1 && NULL;
        -> 0
mysql> select 1 && 0;
        -> 0
      
  IFNULL(expr1,expr2)   If expr1is 
    notNULL,IFNULL()returnsexpr1, else 
    it returnsexpr2.IFNULL()returns a numeric or 
    string value, depending on the context in which it is used:
mysql> select IFNULL(1,0);
        -> 1
mysql> select IFNULL(NULL,10);
        -> 10
mysql> select IFNULL(1/0,10);
        -> 10
mysql> select IFNULL(1/0,'yes');
        -> 'yes'
NULLIF(expr1,expr2) If expr1 = expr2is true, returnNULLelse returnexpr1. This is the same asCASE WHEN x = y THEN NULL ELSE 
    x END:
mysql> select NULLIF(1,1);
        -> NULL
mysql> select NULLIF(1,2);
        -> 1
Note thatexpr1is evaluated twice in MySQL if the arguments 
    are equal.IF(expr1,expr2,expr3) If expr1is TRUE (expr1 <> 0andexpr1 
    <> NULL) thenIF()returnsexpr2, 
    else it returnsexpr3.IF()returns a numeric or 
    string value, depending on the context in which it is used:
mysql> select IF(1>2,2,3);
        -> 3
mysql> select IF(1<2,'yes','no');
        -> 'yes'
mysql> select IF(strcmp('test','test1'),'no','yes');
        -> 'no'
expr1is evaluated as an integer value, which means that if you 
    are testing floating-point or string values, you should do so using a comparison 
    operation:
mysql> select IF(0.1,1,0);
        -> 0
mysql> select IF(0.1<>0,1,0);
        -> 1
In the first case above,IF(0.1)returns0because0.1is converted to an integer value, resulting in a test ofIF(0). This may not be what you expect. In the second case, the 
    comparison tests the original floating-point value to see whether it is non-zero. 
    The result of the comparison is used as an integer. The default return type 
    ofIF()(which may matter when it is stored into a temporary 
    table) is calculated in MySQL Version 3.23 as follows:
      
        | Expression | Return value |  
        | expr2 or expr3 returns string | string |  
        | expr2 or expr3 returns a floating-point value | floating-point |  
        | expr2 or expr3 returns an integer | integer | 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 The first version returns the resultwherevalue=compare-value. 
    The second version returns the result for the first condition, which is true. 
    If there was no matching result value, then the result afterELSEis returned. If there is noELSEpart thenNULLis returned:
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
  The type of the return value (INTEGER,DOUBLEorSTRING) is the same as the type of the first returned value (the 
  expression after the firstTHEN).      String-valued functions return NULLif the length of the result 
  would be greater than themax_allowed_packetserver parameter. 
  See section 5.5.2 Tuning Server Parameters.  For functions that operate on string positions, the first position is numbered 
  1.   
  ASCII(str)  Returns the ASCII code value of the leftmost character 
    of the string str. Returns0ifstris the empty string. ReturnsNULLifstrisNULL:
mysql> select ASCII('2');
        -> 50
mysql> select ASCII(2);
        -> 50
mysql> select ASCII('dx');
        -> 100
See also theORD()function.ORD(str) If the leftmost character of the string str is a multi-byte character, 
    returns the code of multi-byte character by returning the ASCII code value 
    of the character in the format of: ((first byte ASCII code)*256+(second 
    byte ASCII code))[*256+third byte ASCII code...]. If the leftmost character 
    is not a multi-byte character, returns the same value as the likeASCII()function does:
mysql> select ORD('2');
        -> 50
CONV(N,from_base,to_base) Converts numbers between different number bases. Returns a string representation 
    of the number N, converted from basefrom_baseto 
    baseto_base. ReturnsNULLif any argument isNULL. 
    The argumentNis interpreted as an integer, but may be specified 
    as an integer or a string. The minimum base is2and the maximum 
    base is36. Ifto_baseis a negative number,Nis regarded as a signed number. Otherwise,Nis treated as unsigned.CONVworks with 64-bit precision:
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) Returns a string representation of the binary value of N, 
    whereNis a longlong (BIGINT) number. This is equivalent 
    toCONV(N,10,2). ReturnsNULLifNisNULL:
mysql> select BIN(12);
        -> '1100'
OCT(N) Returns a string representation of the octal value of N, whereNis a longlong number. This is equivalent toCONV(N,10,8). 
    ReturnsNULLifNisNULL:
mysql> select OCT(12);
        -> '14'
HEX(N) Returns a string representation of the hexadecimal value of N, 
    whereNis a longlong (BIGINT) number. This is equivalent 
    toCONV(N,10,16). ReturnsNULLifNisNULL:
mysql> select HEX(255);
        -> 'FF'
CHAR(N,...) CHAR()interprets the arguments as integers and returns a 
    string consisting of the characters given by the ASCII code values of those 
    integers.NULLvalues are skipped:
mysql> select CHAR(77,121,83,81,'76');
        -> 'MySQL'
mysql> select CHAR(77,77.3,'77.3');
        -> 'MMM'
CONCAT(str1,str2,...) Returns the string that results from concatenating the arguments. Returns 
    NULLif any argument isNULL. May have more than 
    2 arguments. A numeric argument is converted to the equivalent string form:
mysql> select CONCAT('My', 'S', 'QL');
        -> 'MySQL'
mysql> select CONCAT('My', NULL, 'QL');
        -> NULL
mysql> select CONCAT(14.3);
        -> '14.3'
CONCAT_WS(separator, str1, str2,...) CONCAT_WS()stands for CONCAT With Separator and is a special 
    form ofCONCAT(). The first argument is the separator for the 
    rest of the arguments. The separator can be a string as well as the rest of 
    the arguments. If the separator isNULL, the result will beNULL. 
    The function will skip anyNULLs and empty strings, after the 
    separator argument. The separator will be added between the strings to be 
    concatenated:
mysql> select CONCAT_WS(",","First name","Second name","Last Name");
       -> 'First name,Second name,Last Name'
mysql> select CONCAT_WS(",","First name",NULL,"Last Name");
       -> 'First name,Last Name'
LENGTH(str) 
  OCTET_LENGTH(str) 
  CHAR_LENGTH(str) 
  CHARACTER_LENGTH(str) Returns the length of the string str:
mysql> select LENGTH('text');
        -> 4
mysql> select OCTET_LENGTH('text');
        -> 4
Note that forCHAR_LENGTH(), multi-byte characters are only counted 
    once.LOCATE(substr,str) 
  POSITION(substr IN str) Returns the position of the first occurrence of substring substrin stringstr. Returns0ifsubstris not instr:
mysql> select LOCATE('bar', 'foobarbar');
        -> 4
mysql> select LOCATE('xbar', 'foobar');
        -> 0
This function is multi-byte safe.LOCATE(substr,str,pos) Returns the position of the first occurrence of substring substrin stringstr, starting at positionpos. Returns0ifsubstris not instr:
mysql> select LOCATE('bar', 'foobarbar',5);
        -> 7
This function is multi-byte safe.INSTR(str,substr) Returns the position of the first occurrence of substring substrin stringstr. This is the same as the two-argument form ofLOCATE(), 
    except that the arguments are swapped:
mysql> select INSTR('foobarbar', 'bar');
        -> 4
mysql> select INSTR('xbar', 'foobar');
        -> 0
This function is multi-byte safe.LPAD(str,len,padstr) Returns the string str, left-padded with the stringpadstruntilstrislencharacters long. Ifstris longer thanlen'then it will be shortened tolencharacters.
mysql> select LPAD('hi',4,'??');
        -> '??hi'
RPAD(str,len,padstr) Returns the string str, right-padded with the stringpadstruntilstrislencharacters long. Ifstris longer thanlen'then it will be shortened tolencharacters.
mysql> select RPAD('hi',5,'?');
        -> 'hi???'
LEFT(str,len) Returns the leftmost lencharacters from the stringstr:
mysql> select LEFT('foobarbar', 5);
        -> 'fooba'
This function is multi-byte safe.RIGHT(str,len) Returns the rightmost lencharacters from the stringstr:
mysql> select RIGHT('foobarbar', 4);
        -> 'rbar'
This function is multi-byte safe.SUBSTRING(str,pos,len) 
  SUBSTRING(str FROM pos FOR len) 
  MID(str,pos,len) Returns a substring lencharacters long from stringstr, 
    starting at positionpos. The variant form that usesFROMis ANSI SQL92 syntax:
mysql> select SUBSTRING('Quadratically',5,6);
        -> 'ratica'
This function is multi-byte safe.SUBSTRING(str,pos) 
  SUBSTRING(str FROM pos) Returns a substring from string strstarting at positionpos:
mysql> select SUBSTRING('Quadratically',5);
        -> 'ratically'
mysql> select SUBSTRING('foobarbar' FROM 4);
        -> 'barbar'
This function is multi-byte safe.SUBSTRING_INDEX(str,delim,count) Returns the substring from string strbeforecountoccurrences of the delimiterdelim. Ifcountis 
    positive, everything to the left of the final delimiter (counting from the 
    left) is returned. Ifcountis negative, everything to the right 
    of the final delimiter (counting from the right) is returned:
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);
        -> 'mysql.com'
This function is multi-byte safe.LTRIM(str) Returns the string strwith leading space characters removed:
mysql> select LTRIM('  barbar');
        -> 'barbar'
RTRIM(str) Returns the string strwith trailing space characters removed:
mysql> select RTRIM('barbar   ');
        -> 'barbar'
This function is multi-byte safe.TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) Returns the string strwith allremstrprefixes 
    and/or suffixes removed. If none of the specifiersBOTH,LEADINGorTRAILINGare given,BOTHis assumed. Ifremstris not specified, spaces are removed:
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'
This function is multi-byte safe.SOUNDEX(str) Returns a soundex string from str. Two strings that sound 
    almost the same should have identical soundex strings. A standard soundex 
    string is 4 characters long, but theSOUNDEX()function returns 
    an arbitrarily long string. You can useSUBSTRING()on the result 
    to get a standard soundex string. All non-alphanumeric characters are ignored 
    in the given string. All international alpha characters outside the A-Z range 
    are treated as vowels:
mysql> select SOUNDEX('Hello');
        -> 'H400'
mysql> select SOUNDEX('Quadratically');
        -> 'Q36324'
SPACE(N) Returns a string consisting of Nspace characters:
mysql> select SPACE(6);
        -> '      '
REPLACE(str,from_str,to_str) Returns the string strwith all all occurrences of the stringfrom_strreplaced by the stringto_str:
mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'
This function is multi-byte safe.REPEAT(str,count) Returns a string consisting of the string strrepeatedcounttimes. Ifcount <= 0, returns an empty string. ReturnsNULLifstrorcountareNULL:
mysql> select REPEAT('MySQL', 3);
        -> 'MySQLMySQLMySQL'
REVERSE(str) Returns the string strwith the order of the characters reversed:
mysql> select REVERSE('abc');
        -> 'cba'
This function is multi-byte safe.INSERT(str,pos,len,newstr) Returns the string str, with the substring beginning at positionposandlencharacters long replaced by the stringnewstr:
mysql> select INSERT('Quadratic', 3, 4, 'What');
        -> 'QuWhattic'
This function is multi-byte safe.ELT(N,str1,str2,str3,...) Returns str1ifN=1,str2ifN=2, and so on. ReturnsNULLifNis less than1or greater than the number of arguments.ELT()is the complement ofFIELD():
mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
        -> 'ej'
mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
        -> 'foo'
FIELD(str,str1,str2,str3,...) Returns the index of strin thestr1,str2,str3,...list. Returns0ifstris not found.FIELD()is the complement ofELT():
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) Returns a value 1toNif the stringstris in the liststrlistconsisting ofNsubstrings. 
    A string list is a string composed of substrings separated by `,' 
    characters. If the first argument is a constant string and the second is a 
    column of typeSET, theFIND_IN_SET()function is 
    optimized to use bit arithmetic! Returns0ifstris not instrlistor ifstrlistis the empty string. 
    ReturnsNULLif either argument isNULL. This function 
    will not work properly if the first argument contains a `,':
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
        -> 2
MAKE_SET(bits,str1,str2,...) Returns a set (a string containing substrings separated by `,' 
    characters) consisting of the strings that have the corresponding bit in bitsset.str1corresponds to bit 0,str2to bit 1, etc.NULLstrings instr1,str2,...are not appended to the result:
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]]) Returns a string where for every bit set in 'bit', you get an 'on' string 
    and for every reset bit you get an 'off' string. Each string is separated 
    with 'separator' (default ',') and only 'number_of_bits' (default 64) of 'bits' 
    is used: 
    
mysql> select EXPORT_SET(5,'Y','N',',',4)
        -> Y,N,Y,N
LCASE(str) 
  LOWER(str) Returns the string strwith all characters changed to lowercase 
    according to the current character set mapping (the default is ISO-8859-1 
    Latin1):
mysql> select LCASE('QUADRATICALLY');
        -> 'quadratically'
This function is multi-byte safe.UCASE(str) 
  UPPER(str) Returns the string strwith all characters changed to uppercase 
    according to the current character set mapping (the default is ISO-8859-1 
    Latin1):
mysql> select UCASE('Hej');
        -> 'HEJ'
This function is multi-byte safe.LOAD_FILE(file_name) Reads the file and returns the file contents as a string. The file must 
    be on the server, you must specify the full pathname to the file, and you 
    must have the file privilege. The file must be readable by 
    all and be smaller than max_allowed_packet. If the file doesn't 
    exist or can't be read due to one of the above reasons, the function returnsNULL:
mysql> UPDATE table_name
           SET blob_column=LOAD_FILE("/tmp/picture")
           WHERE id=1;
  If you are not using MySQL Version 3.23, you have to do the reading of the 
  file inside your application and create an INSERTstatement to 
  update the database with the file information. One way to do this, if you are 
  using the MySQL++ library, can be found at http://www.mysql.com/documentation/mysql++/mysql++-examples.html.  MySQL automatically converts numbers to strings as necessary, and vice-versa: 
 
mysql> SELECT 1+"1";
        -> 2
mysql> SELECT CONCAT(2,' test');
        -> '2 test'
 If you want to convert a number to a string explicitly, pass it as the argument 
  to CONCAT().  If a string function is given a binary string as an argument, the resulting 
  string is also a binary string. A number converted to a string is treated as 
  a binary string. This only affects comparisons.           Normally, if any expression in a string comparison is case sensitive, the 
  comparison is performed in case-sensitive fashion.   
  expr LIKE pat [ESCAPE 'escape-char']  Pattern matching using SQL simple regular expression 
    comparison. Returns 1(TRUE) or0(FALSE). WithLIKEyou can use the following two wild-card characters in the 
    pattern:
      
        | % | Matches any number of characters, even zero characters |  
        | _ | Matches exactly one character |  
mysql> select 'David!' LIKE 'David_';
        -> 1
mysql> select 'David!' LIKE '%D%v%';
        -> 1
To test for literal instances of a wild-card character, precede the character 
    with the escape character. If you don't specify theESCAPEcharacter, 
    `\' is assumed:
      
        | \% | Matches one %character |  
        | \_ | Matches one _character |  
mysql> select 'David!' LIKE 'David\_';
        -> 0
mysql> select 'David_' LIKE 'David\_';
        -> 1
To specify a different escape character, use theESCAPEclause:
mysql> select 'David_' LIKE 'David|_' ESCAPE '|';
        -> 1
The following two statements illustrate that string comparisons are case insensitive 
    unless one of the operands is a binary string:
mysql> select 'abc' LIKE 'ABC';
        -> 1
mysql> SELECT 'abc' LIKE BINARY 'ABC';
        -> 0
LIKEis allowed on numeric expressions! (This is a MySQL extension 
    to the ANSI SQLLIKE.)
mysql> select 10 LIKE '1%';
        -> 1
Note: Because MySQL uses the C escape syntax in strings (for example, `\n'), 
    you must double any `\' that you use in yourLIKEstrings. For example, to search for `\n', specify it as `\\n'. 
    To search for `\', specify it as `\\\\' (the backslashes 
    are stripped once by the parser and another time when the pattern match is 
    done, leaving a single backslash to be matched).expr NOT LIKE pat [ESCAPE 'escape-char'] Same as NOT (expr LIKE pat [ESCAPE 'escape-char']).expr REGEXP pat 
  expr RLIKE pat Performs a pattern match of a string expression expragainst 
    a patternpat. The pattern can be an extended regular expression. 
    See section I Description of MySQL regular expression 
    syntax. Returns1ifexprmatchespat, 
    otherwise returns0.RLIKEis a synonym forREGEXP, 
    provided formSQLcompatibility. Note: Because MySQL uses the 
    C escape syntax in strings (for example, `\n'), you must double 
    any `\' that you use in yourREGEXPstrings. As 
    of MySQL Version 3.23.4,REGEXPis case insensitive for normal 
    (not binary) strings:
mysql> select 'Monty!' REGEXP 'm%y%%';
        -> 0
mysql> select 'Monty!' REGEXP '.*';
        -> 1
mysql> select 'new*\n*line' REGEXP 'new\\*.\\*line';
        -> 1
mysql> select "a" REGEXP "A", "a" REGEXP BINARY "A";
        -> 1  0
mysql> select "a" REGEXP "^[a-d]";
        -> 1
 REGEXPandRLIKEuse the current character set 
    (ISO-8859-1 Latin1 by default) when deciding the type of a character.expr NOT REGEXP pat 
  expr NOT RLIKE pat Same as NOT (expr REGEXP pat).STRCMP(expr1,expr2) STRCMP()returns0if the strings are the same,-1if the first argument is smaller than the second according 
    to the current sort order, and1otherwise:
mysql> select STRCMP('text', 'text2');
        -> -1
mysql> select STRCMP('text2', 'text');
        -> 1
mysql> select STRCMP('text', 'text');
        -> 0
MATCH (col1,col2,...) AGAINST (expr) MATCH ... AGAINST()is used for full-text search and returns 
    relevance - similarity measure between the text in columns(col1,col2,...)and the queryexpr. Relevance is a positive floating-point number. 
    Zero relevance means no similarity. ForMATCH ... AGAINST()to 
    work, a FULLTEXT index must be created first. See section 
    6.5.3CREATE TABLESyntax.MATCH ... AGAINST()is available in MySQL Version 3.23.23 or 
    later. For details and usage examples see section 6.8 
    MySQL Full-text Search.         
  BINARY  The BINARYoperator casts the string 
    following it to a binary string. This is an easy way to force a column comparison 
    to be case sensitive even if the column isn't defined asBINARYorBLOB:
mysql> select "a" = "A";
        -> 1
mysql> select BINARY "a" = "A";
        -> 0
BINARYwas introduced in MySQL Version 3.23.0. Note that in some 
    context MySQL will not be able to use the index efficiently when you cast 
    an indexed column toBINARY.  If you want to compare a blob case-insensitively you can always convert the 
  blob to upper case before doing the comparison:  
SELECT 'A' LIKE UPPER(blob_col) FROM table_name;
  We plan to soon introduce casting between different character sets to make 
  string comparison even more flexible.   The usual arithmetic operators are available. Note that in the case of `-', 
  `+', and `*', the result is calculated with BIGINT(64-bit) precision if both arguments are integers!    
  
  +   Addition: 
    
mysql> select 3+5;
        -> 8
- Subtraction: 
    
mysql> select 3-5;
        -> -2
* Multiplication: 
    
mysql> select 3*5;
        -> 15
mysql> select 18014398509481984*18014398509481984.0;
        -> 324518553658426726783156020576256.0
mysql> select 18014398509481984*18014398509481984;
        -> 0
The result of the last expression is incorrect because the result of the integer 
    multiplication exceeds the 64-bit range ofBIGINTcalculations./ Division: 
    
mysql> select 3/5;
        -> 0.60
Division by zero produces aNULLresult:
mysql> select 102/(1-1);
        -> NULL
A division will be calculated withBIGINTarithmetic only if 
    performed in a context where its result is converted to an integer!  All mathematical functions return NULLin case of an error.      
  -    Unary 
    minus. Changes the sign of the argument: 
    
mysql> select - 2;
        -> -2
Note that if this operator is used with aBIGINT, the return 
    value is aBIGINT! This means that you should avoid using-on integers that may have the value of-2^63!ABS(X) Returns the absolute value of X:
mysql> select ABS(2);
        -> 2
mysql> select ABS(-32);
        -> 32
This function is safe to use withBIGINTvalues.SIGN(X) Returns the sign of the argument as -1,0, or1, depending on whetherXis negative, zero, or 
    positive:
mysql> select SIGN(-32);
        -> -1
mysql> select SIGN(0);
        -> 0
mysql> select SIGN(234);
        -> 1
MOD(N,M) 
  % Modulo (like the %operator in C). Returns the remainder ofNdivided byM:
mysql> select MOD(234, 10);
        -> 4
mysql> select 253 % 7;
        -> 1
mysql> select MOD(29,9);
        -> 2
This function is safe to use withBIGINTvalues.FLOOR(X) Returns the largest integer value not greater than X:
mysql> select FLOOR(1.23);
        -> 1
mysql> select FLOOR(-1.23);
        -> -2
Note that the return value is converted to aBIGINT!CEILING(X) Returns the smallest integer value not less than X:
mysql> select CEILING(1.23);
        -> 2
mysql> select CEILING(-1.23);
        -> -1
Note that the return value is converted to aBIGINT!ROUND(X) Returns the argument X, rounded to the nearest integer:
mysql> select ROUND(-1.23);
        -> -1
mysql> select ROUND(-1.58);
        -> -2
mysql> select ROUND(1.58);
        -> 2
Note that the behavior ofROUND()when the argument is half way 
    between two integers depends on the C library implementation. Some round to 
    the nearest even number, always up, always down, or always towards zero. If 
    you need one kind of rounding, you should use a well-defined function likeTRUNCATE()orFLOOR()instead.ROUND(X,D) Returns the argument X, rounded to a number withDdecimals. IfDis0, the result will have no decimal 
    point or fractional part:
mysql> select ROUND(1.298, 1);
        -> 1.3
mysql> select ROUND(1.298, 0);
        -> 1
EXP(X) Returns the value of e(the base of natural logarithms) raised 
    to the power ofX:
mysql> select EXP(2);
        -> 7.389056
mysql> select EXP(-2);
        -> 0.135335
LOG(X) Returns the natural logarithm of X:
mysql> select LOG(2);
        -> 0.693147
mysql> select LOG(-2);
        -> NULL
If you want the log of a numberXto some arbitary baseB, 
    use the formulaLOG(X)/LOG(B).LOG10(X) Returns the base-10 logarithm of X:
mysql> select LOG10(2);
        -> 0.301030
mysql> select LOG10(100);
        -> 2.000000
mysql> select LOG10(-100);
        -> NULL
POW(X,Y) 
  POWER(X,Y) Returns the value of Xraised to the power ofY:
mysql> select POW(2,2);
        -> 4.000000
mysql> select POW(2,-2);
        -> 0.250000
SQRT(X) Returns the non-negative square root of X:
mysql> select SQRT(4);
        -> 2.000000
mysql> select SQRT(20);
        -> 4.472136
PI() Returns the value of PI. The default shown number of decimals is 5, but 
    MySQL internally uses the full double precession for PI. 
    
mysql> select PI();
        -> 3.141593
mysql> SELECT PI()+0.000000000000000000;
        -> 3.141592653589793116
COS(X) Returns the cosine of X, whereXis given in 
    radians:
mysql> select COS(PI());
        -> -1.000000
SIN(X) Returns the sine of X, whereXis given in radians:
mysql> select SIN(PI());
        -> 0.000000
TAN(X) Returns the tangent of X, whereXis given in 
    radians:
mysql> select TAN(PI()+1);
        -> 1.557408
ACOS(X) Returns the arc cosine of X, that is, the value whose cosine 
    isX. ReturnsNULLifXis not in the 
    range-1to1:
mysql> select ACOS(1);
        -> 0.000000
mysql> select ACOS(1.0001);
        -> NULL
mysql> select ACOS(0);
        -> 1.570796
ASIN(X) Returns the arc sine of X, that is, the value whose sine isX. ReturnsNULLifXis not in the 
    range-1to1:
mysql> select ASIN(0.2);
        -> 0.201358
mysql> select ASIN('foo');
        -> 0.000000
ATAN(X) Returns the arc tangent of X, that is, the value whose tangent 
    isX:
mysql> select ATAN(2);
        -> 1.107149
mysql> select ATAN(-2);
        -> -1.107149
ATAN(Y,X) 
  ATAN2(Y,X) Returns the arc tangent of the two variables XandY. 
    It is similar to calculating the arc tangent ofY / X, except 
    that the signs of both arguments are used to determine the quadrant of the 
    result:
mysql> select ATAN(-2,2);
        -> -0.785398
mysql> select ATAN2(PI(),0);
        -> 1.570796
COT(X) Returns the cotangent of X:
mysql> select COT(12);
        -> -1.57267341
mysql> select COT(0);
        -> NULL
RAND() 
  RAND(N) Returns a random floating-point value in the range 0to1.0. 
    If an integer argumentNis specified, it is used as the seed 
    value:
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
You can't use a column withRAND()values in anORDER BYclause, becauseORDER BYwould evaluate the column multiple times. 
    In MySQL Version 3.23, you can, however, do:SELECT * FROM table_name 
    ORDER BY RAND()This is useful to get a random sample of a setSELECT 
    * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000. 
    Note that aRAND()in aWHEREclause will be re-evaluated 
    every time theWHEREis executed.LEAST(X,Y,...) With two or more arguments, returns the smallest (minimum-valued) argument. 
    The arguments are compared using the following rules: 
    
       If the return value is used in an INTEGERcontext, or 
        all arguments are integer-valued, they are compared as integers. If the return value is used in a REALcontext, or all 
        arguments are real-valued, they are compared as reals. If any argument is a case-sensitive string, the arguments are compared 
        as case-sensitive strings. 
       In other cases, the arguments are compared as case-insensitive strings: 
     
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"
In MySQL versions prior to Version 3.22.5, you can useMIN()instead ofLEAST.GREATEST(X,Y,...) Returns the largest (maximum-valued) argument. The arguments are compared 
    using the same rules as for LEAST:
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"
In MySQL versions prior to Version 3.22.5, you can useMAX()instead ofGREATEST.DEGREES(X) Returns the argument X, converted from radians to degrees:
mysql> select DEGREES(PI());
        -> 180.000000
RADIANS(X) Returns the argument X, converted from degrees to radians:
mysql> select RADIANS(90);
        -> 1.570796
TRUNCATE(X,D) Returns the number X, truncated toDdecimals. 
    IfDis0, the result will have no decimal point 
    or fractional part:
mysql> select TRUNCATE(1.223,1);
        -> 1.2
mysql> select TRUNCATE(1.999,1);
        -> 1.9
mysql> select TRUNCATE(1.999,0);
        -> 1
Note that as decimal numbers are normally not stored as exact numbers in computers, 
    but as double values, you may be fooled by the following result:
mysql> select TRUNCATE(10.28*100,0);
       -> 1027
The above happens because 10.28 is actually stored as something like 10.2799999999999999.      See section 6.2.2 Date and Time 
  Types for a description of the range of values each type has and the valid 
  formats in which date and time values may be specified.   Here is an example that uses date functions. The query below selects all records 
  with a date_colvalue from within the last 30 days: 
mysql> SELECT something FROM table
           WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
 
  DAYOFWEEK(date)  Returns the weekday index for date(1= Sunday,2= Monday, ...7= Saturday). 
    These index values correspond to the ODBC standard:
mysql> select DAYOFWEEK('1998-02-03');
        -> 3
WEEKDAY(date) Returns the weekday index for date(0= Monday,1= Tuesday, ...6= Sunday):
mysql> select WEEKDAY('1997-10-04 22:23:00');
        -> 5
mysql> select WEEKDAY('1997-11-05');
        -> 2
DAYOFMONTH(date) Returns the day of the month for date, in the range1to31:
mysql> select DAYOFMONTH('1998-02-03');
        -> 3
DAYOFYEAR(date) Returns the day of the year for date, in the range1to366:
mysql> select DAYOFYEAR('1998-02-03');
        -> 34
MONTH(date) Returns the month for date, in the range1to12:
mysql> select MONTH('1998-02-03');
        -> 2
DAYNAME(date) Returns the name of the weekday for date:
mysql> select DAYNAME("1998-02-05");
        -> 'Thursday'
MONTHNAME(date) Returns the name of the month for date:
mysql> select MONTHNAME("1998-02-05");
        -> 'February'
QUARTER(date) Returns the quarter of the year for date, in the range1to4:
mysql> select QUARTER('98-04-01');
        -> 2
WEEK(date) 
  WEEK(date,first) With a single argument, returns the week for date, in the 
    range0to53(yes, there may be the beginnings 
    of a week 53), for locations where Sunday is the first day of the week. The 
    two-argument form ofWEEK()allows you to specify whether the 
    week starts on Sunday or Monday. The week starts on Sunday if the second argument 
    is0, on Monday if the second argument is1:
mysql> select WEEK('1998-02-20');
        -> 7
mysql> select WEEK('1998-02-20',0);
        -> 7
mysql> select WEEK('1998-02-20',1);
        -> 8
mysql> select WEEK('1998-12-31',1);
        -> 53
YEAR(date) Returns the year for date, in the range1000to9999:
mysql> select YEAR('98-02-03');
        -> 1998
YEARWEEK(date) 
  YEARWEEK(date,first) Returns year and week for a date. The second arguments works exactly like 
    the second argument to WEEK(). Note that the year may be different 
    from the year in the date argument for the first and the last week of the 
    year:
mysql> select YEARWEEK('1987-01-01');
        -> 198653
HOUR(time) Returns the hour for time, in the range0to23:
mysql> select HOUR('10:05:03');
        -> 10
MINUTE(time) Returns the minute for time, in the range0to59:
mysql> select MINUTE('98-02-03 10:05:03');
        -> 5
SECOND(time) Returns the second for time, in the range0to59:
mysql> select SECOND('10:05:03');
        -> 3
PERIOD_ADD(P,N) Adds Nmonths to periodP(in the formatYYMMorYYYYMM). Returns a value in the formatYYYYMM. 
    Note that the period argumentPis not a date value:
mysql> select PERIOD_ADD(9801,2);
        -> 199803
PERIOD_DIFF(P1,P2) Returns the number of months between periods P1andP2.P1andP2should be in the formatYYMMorYYYYMM. Note that the period argumentsP1andP2are not date values:
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) These functions perform date arithmetic. They are new for MySQL Version 
    3.22. ADDDATE()andSUBDATE()are synonyms forDATE_ADD()andDATE_SUB(). In MySQL Version 3.23, you can use+and-instead ofDATE_ADD()andDATE_SUB()if the expression on the right side is a date or datetime column. (See example)dateis aDATETIMEorDATEvalue specifying 
    the starting date.expris an expression specifying the interval 
    value to be added or subtracted from the starting date.expris a string; it may start with a `-' for negative intervals.typeis a keyword indicating how the expression should be interpreted. 
    The related functionEXTRACT(type FROM date)returns the 'type' 
    interval from the date. The following table shows how thetypeandexprarguments are related:
      MySQL allows any punctuation delimiter in the
        | typevalue | Expected exprformat |  
        | SECOND | SECONDS |  
        | MINUTE | MINUTES |  
        | HOUR | HOURS |  
        | DAY | DAYS |  
        | MONTH | MONTHS |  
        | YEAR | YEARS |  
        | 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" |  exprformat. Those 
    shown in the table are the suggested delimiters. If thedateargument is aDATEvalue and your calculations involve onlyYEAR,MONTH, andDAYparts (that is, no time parts), the 
    result is aDATEvalue. Otherwise the result is aDATETIMEvalue:
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
If you specify an interval value that is too short (does not include all the 
    interval parts that would be expected from thetypekeyword), 
    MySQL assumes you have left out the leftmost parts of the interval value. 
    For example, if you specify atypeofDAY_SECOND, 
    the value ofexpris expected to have days, hours, minutes, and 
    seconds parts. If you specify a value like"1:10", MySQL assumes 
    that the days and hours parts are missing and the value represents minutes 
    and seconds. In other words,"1:10" DAY_SECONDis interpreted 
    in such a way that it is equivalent to"1:10" MINUTE_SECOND. 
    This is analogous to the way that MySQL interpretsTIMEvalues 
    as representing elapsed time rather than as time of day. Note that if you 
    add or subtract a date value against something that contains a time part, 
    the date value will be automatically converted to a datetime value:
mysql> select date_add("1999-01-01", interval 1 day);
       -> 1999-01-02
mysql> select date_add("1999-01-01", interval 1 hour);
       -> 1999-01-01 01:00:00
If you use really incorrect dates, the result isNULL. If you 
    addMONTH,YEAR_MONTH, orYEARand 
    the resulting date has a day that is larger than the maximum day for the new 
    month, the day is adjusted to the maximum days in the new month:
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
        -> 1998-02-28
Note from the preceding example that the wordINTERVALand thetypekeyword are not case sensitive.EXTRACT(type FROM date) The EXTRACT()function uses the same kinds of interval type 
    specifiers asDATE_ADD()orDATE_SUB(), but extracts 
    parts from the date rather than performing date arithmetic.
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
TO_DAYS(date) Given a date date, returns a daynumber (the number of days 
    since year 0):
mysql> select TO_DAYS(950501);
        -> 728779
mysql> select TO_DAYS('1997-10-07');
        -> 729669
TO_DAYS()is not intended for use with values that precede the 
    advent of the Gregorian calendar (1582), because it doesn't take into account 
    the days that were lost when the calendar was changed.FROM_DAYS(N) Given a daynumber N, returns aDATEvalue:
mysql> select FROM_DAYS(729669);
        -> '1997-10-07'
FROM_DAYS()is not intended for use with values that precede 
    the advent of the Gregorian calendar (1582), because it doesn't take into 
    account the days that were lost when the calendar was changed.DATE_FORMAT(date,format) Formats the datevalue according to theformatstring. The following specifiers may be used in theformatstring:
      All other characters are just copied to the result without interpretation:
        | %M | Month name ( January..December) |  
        | %W | Weekday name ( Sunday..Saturday) |  
        | %D | Day of the month with English suffix ( 1st,2nd,3rd, etc.) |  
        | %Y | Year, numeric, 4 digits |  
        | %y | Year, numeric, 2 digits |  
        | %X | Year for the week where Sunday is the first day of the week, numeric, 
          4 digits, used with '%V' |  
        | %x | Year for the week, where Monday is the first day of the week, numeric, 
          4 digits, used with '%v' |  
        | %a | Abbreviated weekday name ( Sun..Sat) |  
        | %d | Day of the month, numeric ( 00..31) |  
        | %e | Day of the month, numeric ( 0..31) |  
        | %m | Month, numeric ( 01..12) |  
        | %c | Month, numeric ( 1..12) |  
        | %b | Abbreviated month name ( Jan..Dec) |  
        | %j | Day of year ( 001..366) |  
        | %H | Hour ( 00..23) |  
        | %k | Hour ( 0..23) |  
        | %h | Hour ( 01..12) |  
        | %I | Hour ( 01..12) |  
        | %l | Hour ( 1..12) |  
        | %i | Minutes, numeric ( 00..59) |  
        | %r | Time, 12-hour ( hh:mm:ss [AP]M) |  
        | %T | Time, 24-hour ( hh:mm:ss) |  
        | %S | Seconds ( 00..59) |  
        | %s | Seconds ( 00..59) |  
        | %p | AMorPM |  
        | %w | Day of the week ( 0=Sunday..6=Saturday) |  
        | %U | Week ( 0..53), where Sunday is the first 
          day of the week |  
        | %u | Week ( 0..53), where Monday is the first 
          day of the week |  
        | %V | Week ( 1..53), where Sunday is the first 
          day of the week. Used with '%X' |  
        | %v | Week ( 1..53), where Monday is the first 
          day of the week. Used with '%x' |  
        | %% | A literal `%'. |  
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'
mysql> select DATE_FORMAT('1999-01-01', '%X %V');
        -> '1998 52'
As of MySQL Version 3.23, the `%' character is required before 
    format specifier characters. In earlier versions of MySQL, `%' 
    was optional.TIME_FORMAT(time,format) This is used like the DATE_FORMAT()function above, but theformatstring may contain only those format specifiers that handle 
    hours, minutes, and seconds. Other specifiers produce aNULLvalue or0.CURDATE() 
  CURRENT_DATE Returns today's date as a value in 'YYYY-MM-DD'orYYYYMMDDformat, depending on whether the function is used in a string or numeric context:
mysql> select CURDATE();
        -> '1997-12-15'
mysql> select CURDATE() + 0;
        -> 19971215
CURTIME() 
  CURRENT_TIME Returns the current time as a value in 'HH:MM:SS'orHHMMSSformat, depending on whether the function is used in a string or numeric context:
mysql> select CURTIME();
        -> '23:50:26'
mysql> select CURTIME() + 0;
        -> 235026
NOW() 
  SYSDATE() 
  CURRENT_TIMESTAMP Returns the current date and time as a value in 'YYYY-MM-DD HH:MM:SS'orYYYYMMDDHHMMSSformat, depending on whether the function is 
    used in a string or numeric context:
mysql> select NOW();
        -> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
        -> 19971215235026
UNIX_TIMESTAMP() 
  UNIX_TIMESTAMP(date) If called with no argument, returns a Unix timestamp (seconds since '1970-01-01 
    00:00:00'GMT). IfUNIX_TIMESTAMP()is called with adateargument, it returns the value of the argument as seconds since'1970-01-01 
    00:00:00'GMT.datemay be aDATEstring, 
    aDATETIMEstring, aTIMESTAMP, or a number in the 
    formatYYMMDDorYYYYMMDDin local time:
mysql> select UNIX_TIMESTAMP();
        -> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
        -> 875996580
WhenUNIX_TIMESTAMPis used on aTIMESTAMPcolumn, 
    the function will receive the value directly, with no implicit ``string-to-unix-timestamp'' 
    conversion. If you giveUNIX_TIMESTAMP()a wrong or out-of-range 
    date, it will return 0.FROM_UNIXTIME(unix_timestamp) Returns a representation of the unix_timestampargument as 
    a value in'YYYY-MM-DD HH:MM:SS'orYYYYMMDDHHMMSSformat, depending on whether the function is used in a string or numeric context:
mysql> select FROM_UNIXTIME(875996580);
        -> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
        -> 19971004222300
FROM_UNIXTIME(unix_timestamp,format) Returns a string representation of the Unix timestamp, formatted according 
    to the formatstring.formatmay contain the same 
    specifiers as those listed in the entry for theDATE_FORMAT()function:
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
                            '%Y %D %M %h:%i:%s %x');
        -> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds) Returns the secondsargument, converted to hours, minutes, 
    and seconds, as a value in'HH:MM:SS'orHHMMSSformat, depending on whether the function is used in a string or numeric context:
mysql> select SEC_TO_TIME(2378);
        -> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
        -> 3938
TIME_TO_SEC(time) Returns the timeargument, converted to seconds:
mysql> select TIME_TO_SEC('22:23:00');
        -> 80580
mysql> select TIME_TO_SEC('00:39:38');
        -> 2378
      
  MySQL uses BIGINT(64-bit) arithmetic for bit operations, so 
  these operators have a maximum range of 64 bits.  
  |   Bitwise OR: 
    
mysql> select 29 | 15;
        -> 31
& Bitwise AND: 
    
mysql> select 29 & 15;
        -> 13
<< Shifts a longlong (BIGINT) number to the left:
mysql> select 1 << 2;
        -> 4
>> Shifts a longlong (BIGINT) number to the right:
mysql> select 4 >> 2;
        -> 1
~ Invert all bits: 
    
mysql> select 5 & ~1;
        -> 4
BIT_COUNT(N) Returns the number of bits that are set in the argument N:
mysql> select BIT_COUNT(29);
        -> 4
      
  DATABASE()  Returns the current database name: 
    
mysql> select DATABASE();
        -> 'test'
If there is no current database,DATABASE()returns the empty 
    string.USER() 
  SYSTEM_USER() 
  SESSION_USER() Returns the current MySQL user name: 
    
mysql> select USER();
        -> 'davida@localhost'
In MySQL Version 3.22.11 or later, this includes the client hostname as well 
    as the user name. You can extract just the user name part like this (which 
    works whether or not the value includes a hostname part):
mysql> select substring_index(USER(),"@",1);
        -> 'davida'
PASSWORD(str) Calculates a password string from the plaintext password str. 
    This is the function that is used for encrypting MySQL passwords for storage 
    in thePasswordcolumn of theusergrant table:
mysql> select PASSWORD('badpwd');
        -> '7f84554057dd964b'
PASSWORD()encryption is non-reversible.PASSWORD()does not perform password encryption in the same way 
    that Unix passwords are encrypted. You should not assume that if your Unix 
    password and your MySQL password are the same,PASSWORD()will 
    result in the same encrypted value as is stored in the Unix password file. 
    SeeENCRYPT().ENCRYPT(str[,salt]) Encrypt strusing the Unixcrypt()system call. 
    Thesaltargument should be a string with two characters. (As 
    of MySQL Version 3.22.16,saltmay be longer than two characters.):
mysql> select ENCRYPT("hello");
        -> 'VxuFAJXVARROc'
Ifcrypt()is not available on your system,ENCRYPT()always returnsNULL.ENCRYPT()ignores all but the 
    first 8 characters ofstr, at least on some systems. This will 
    be determined by the behavior of the underlyingcrypt()system 
    call.ENCODE(str,pass_str) Encrypt strusingpass_stras the password. To 
    decrypt the result, useDECODE(). The results is a binary string 
    of the same length asstring. If you want to save it in a column, 
    use aBLOBcolumn type.DECODE(crypt_str,pass_str) Descrypts the encrypted string crypt_strusingpass_stras the password.crypt_strshould be a string returned fromENCODE().MD5(string) Calculates a MD5 checksum for the string. Value is returned as a 32 long 
    hex number that may, for example, be used as a hash key: 
    
mysql> select MD5("testing");
        -> 'ae2b1fca515949e5d54fb22b8ed95575'
This is an "RSA Data Security, Inc. MD5 Message-Digest Algorithm".LAST_INSERT_ID([expr]) Returns the last automatically generated value that was inserted into an 
    AUTO_INCREMENTcolumn. See section 8.4.3.126mysql_insert_id().
mysql> select LAST_INSERT_ID();
        -> 195
The last ID that was generated is maintained in the server on a per-connection 
    basis. It will not be changed by another client. It will not even be changed 
    if you update anotherAUTO_INCREMENTcolumn with a non-magic 
    value (that is, a value that is notNULLand not0). 
    If you insert many rows at the same time with an insert statement,LAST_INSERT_ID()returns the value for the first inserted row. The reason for this is so that 
    you it makes it possible to easily reproduce the sameINSERTstatement against some other server.  Ifexpris given as an argument toLAST_INSERT_ID(), then the value of 
    the argument is returned by the function, is set as the next value to be returned 
    byLAST_INSERT_ID()and used as the next auto_increment value. 
    This can be used to simulate sequences: First create the table:
mysql> create table sequence (id int not null);
mysql> insert into sequence values (0);
Then the table can be used to generate sequence numbers like this: 
mysql> update sequence set id=LAST_INSERT_ID(id+1);
You can generate sequences without calling LAST_INSERT_ID(), 
    but the utility of using the function this way is that the ID value is maintained 
    in the server as the last automatically generated value. You can retrieve 
    the new ID as you would read any normalAUTO_INCREMENTvalue 
    in MySQL. For example,LAST_INSERT_ID()(without an argument) 
    will return the new ID. The C API functionmysql_insert_id()can also be used to get the value. Note that asmysql_insert_id()is only updated afterINSERTandUPDATEstatements, 
    you can't use this function to retrieve the value forLAST_INSERT_ID(expr)after executing other SQL statements likeSELECTorSET.FORMAT(X,D) Formats the number Xto a format like'#,###,###.##', 
    rounded toDdecimals. IfDis0, the 
    result will have no decimal point or fractional part:
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() Returns a string indicating the MySQL server version: 
    
mysql> select VERSION();
        -> '3.23.13-log'
Note that if your version ends with-logthis means that logging 
    is enabled.CONNECTION_ID() Returns the connection id (thread_id) for the connection. 
    Every connection has its own unique id:
mysql> select CONNECTION_ID();
        -> 1
GET_LOCK(str,timeout) Tries to obtain a lock with a name given by the string str, 
    with a timeout oftimeoutseconds. Returns1if 
    the lock was obtained successfully,0if the attempt timed out, 
    orNULLif an error occurred (such as running out of memory or 
    the thread was killed withmysqladmin kill). A lock is released 
    when you executeRELEASE_LOCK(), execute a newGET_LOCK(), 
    or the thread terminates. This function can be used to implement application 
    locks or to simulate record locks. It blocks requests by other clients for 
    locks with the same name; clients that agree on a given lock string name can 
    use the string to perform cooperative advisory locking:
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
Note that the secondRELEASE_LOCK()call returnsNULLbecause the lock"lock1"was automatically released by the secondGET_LOCK()call.RELEASE_LOCK(str) Releases the lock named by the string strthat was obtained 
    withGET_LOCK(). Returns1if the lock was released,0if the lock wasn't locked by this thread (in which case the 
    lock is not released), andNULLif the named lock didn't exist. 
    The lock will not exist if it was never obtained by a call toGET_LOCK()or if it already has been released.BENCHMARK(count,expr) The BENCHMARK()function executes the expressionexprrepeatedlycounttimes. It may be used to time how fast MySQL 
    processes the expression. The result value is always0. The intended 
    use is in themysqlclient, which reports query execution times:
mysql> select BENCHMARK(1000000,encode("hello","goodbye"));
+----------------------------------------------+
| BENCHMARK(1000000,encode("hello","goodbye")) |
+----------------------------------------------+
|                                            0 |
+----------------------------------------------+
1 row in set (4.74 sec)
The time reported is elapsed time on the client end, not CPU time on the server 
    end. It may be advisable to executeBENCHMARK()several times, 
    and interpret the result with regard to how heavily loaded the server machine 
    is.INET_NTOA(expr) Returns the network address (4 or 8 byte) for the numeric expression: 
    
mysql> select INET_NTOA(3520061480);
       ->  "209.207.224.40"
INET_ATON(expr) Returns an integer that represents the numeric value for a network address. 
    Addresses may be 4 or 8 byte addresses: 
    
mysql> select INET_ATON("209.207.224.40");
       ->  3520061480
The generated number is always in network byte order; For example the above 
    number is calculated as209*255^3 + 207*255^2 + 224*255 +40.MASTER_POS_WAIT(log_name, log_pos) Blocks until the slave reaches the specified position in the master log 
    during replication. If master information is not initialized, returns NULL. 
    If the slave is not running, will block and wait until it is started and goes 
    to or past the specified position. If the slave is already past the specified 
    position, returns immediately. The return value is the number of log events 
    it had to wait to get to the specified position, or NULL in case of error. 
    Useful for control of master-slave synchronization, but was originally written 
    to facilitate replication testing. 
      |  |