Source code editor What Is Ajax
↑
Name | Description |
---|---|
ASCII() | Return numeric value of left-most character |
BIN() | Return a string representation of the argument |
BIT_LENGTH() | Return length of argument in bits |
CHAR_LENGTH() | Return number of characters in argument |
CHAR() | Return the character for each integer passed |
CHARACTER_LENGTH() | A synonym for CHAR_LENGTH() |
CONCAT_WS() | Return concatenate with separator |
CONCAT() | Return concatenated string |
CONV() | Convert numbers between different number bases |
ELT() | Return string at index number |
<=> | NULL-safe equal to operator |
= | Equal operator |
EXPORT_SET() | Return a string such that for every bit set in the value bits, you get an on string and for every unset bit, you get an off string |
FIELD() | Return the index (position) of the first argument in the subsequent arguments |
FIND_IN_SET() | Return the index position of the first argument within the second argument |
FORMAT() | Return a number formatted to specified number of decimal places |
>= | Greater than or equal operator |
> | Greater than operator |
HEX() | Return a string representation of a hex value |
INSERT() | Insert a substring at the specified position up to the specified number of characters |
INSTR() | Return the index of the first occurrence of substring |
IS NULL | NULL value test |
IS | Test a value against a boolean |
LCASE() | Synonym for LOWER() |
LEFT() | Return the leftmost number of characters as specified |
LENGTH() | Return the length of a string in bytes |
<= | Less than or equal operator |
< | Less than operator |
LIKE | Simple pattern matching |
LOAD_FILE() | Load the named file |
LOCATE() | Return the position of the first occurrence of substring |
LOWER() | Return the argument in lowercase |
LPAD() | Return the string argument, left-padded with the specified string |
LTRIM() | Remove leading spaces |
MAKE_SET() | Return a set of comma-separated strings that have the corresponding bit in bits set |
MID() | Return a substring starting from the specified position |
!= , <> | Not equal operator |
NOT LIKE | Negation of simple pattern matching |
NOT REGEXP | Negation of REGEXP |
OCT() | Return a string representation of the octal argument |
OCTET_LENGTH() | A synonym for LENGTH() |
ORD() | If the leftmost character of the argument is a multi-byte character, returns the code for that character |
POSITION() | A synonym for LOCATE() |
QUOTE() | Escape the argument for use in an SQL statement |
REGEXP | Pattern matching using regular expressions |
REPEAT() | Repeat a string the specified number of times |
REPLACE() | Replace occurrences of a specified string |
REVERSE() | Reverse the characters in a string |
RIGHT() | Return the specified rightmost number of characters |
RLIKE | Synonym for REGEXP |
RPAD() | Append string the specified number of times |
RTRIM() | Remove trailing spaces |
SOUNDEX() | Return a soundex string |
SOUNDS LIKE (v4.1.0) | Compare sounds |
SPACE() | Return a string of the specified number of spaces |
STRCMP() | Compare two strings |
SUBSTRING_INDEX() | Return a substring from a string before the specified number of occurrences of the delimiter |
SUBSTRING() , SUBSTR() | Return the substring as specified |
TRIM() | Remove leading and trailing spaces |
UCASE() | Synonym for UPPER() |
UNHEX() (v4.1.2) | Convert each pair of hexadecimal digits to a character |
UPPER() | Convert to uppercase |
String-valued functions return NULL
if the length of the result would be greater than the value of the max_allowed_packet
system variable. See Section 7.5.2, “Tuning Server Parameters”.
For functions that operate on string positions, the first position is numbered 1.
For functions that take length arguments, non-integer arguments are rounded to the nearest integer.
Returns the numeric value of the leftmost character of the string str
. Returns 0
if str
is the empty string. Returns NULL
if str
is NULL
. ASCII()
works for characters with numeric values from 0
to 255
.
mysql>SELECT ASCII('2');
-> 50 mysql>SELECT ASCII(2);
-> 50 mysql>SELECT ASCII('dx');
-> 100
See also the ORD()
function.
Returns a string representation of the binary value of N
, where N
is a longlong (BIGINT
) number. This is equivalent to CONV(
. Returns N
,10,2)NULL
if N
is NULL
.
mysql> SELECT BIN(12);
-> '1100'
Returns the length of the string str
in bits.
mysql> SELECT BIT_LENGTH('text');
-> 32
CHAR(
N
,... [USING charset_name
])
CHAR()
interprets each argument N
as an integer and returns a string consisting of the characters given by the code values of those integers. NULL
values are skipped.
mysql>SELECT CHAR(77,121,83,81,'76');
-> 'MySQL' mysql>SELECT CHAR(77,77.3,'77.3');
-> 'MMM'
As of MySQL 5.0.15, CHAR()
arguments larger than 255 are converted into multiple result bytes. For example, CHAR(256)
is equivalent to CHAR(1,0)
, and CHAR(256*256)
is equivalent to CHAR(1,0,0)
:
mysql>SELECT HEX(CHAR(1,0)), HEX(CHAR(256));
+----------------+----------------+ | HEX(CHAR(1,0)) | HEX(CHAR(256)) | +----------------+----------------+ | 0100 | 0100 | +----------------+----------------+ mysql>SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256));
+------------------+--------------------+ | HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) | +------------------+--------------------+ | 010000 | 010000 | +------------------+--------------------+
By default, CHAR()
returns a binary string. To produce a string in a given character set, use the optional USING
clause:
mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));
+---------------------+--------------------------------+
| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |
+---------------------+--------------------------------+
| binary | utf8 |
+---------------------+--------------------------------+
If USING
is given and the result string is illegal for the given character set, a warning is issued. Also, if strict SQL mode is enabled, the result from CHAR()
becomes NULL
.
Before MySQL 5.0.15, CHAR()
returns a string in the connection character set and the USING
clause is unavailable. In addition, each argument is interpreted modulo 256, so CHAR(256)
and CHAR(256*256)
both are equivalent to CHAR(0)
.
Returns the length of the string str
, measured in characters. A multi-byte character counts as a single character. This means that for a string containing five two-byte characters, LENGTH()
returns 10
, whereas CHAR_LENGTH()
returns 5
.
CHARACTER_LENGTH()
is a synonym for CHAR_LENGTH()
.
Returns the string that results from concatenating the arguments. May have one or more arguments. If all arguments are non-binary strings, the result is a non-binary string. If the arguments include any binary strings, the result is a binary string. A numeric argument is converted to its equivalent binary string form; if you want to avoid that, you can use an explicit type cast, as in this example:
SELECT CONCAT(CAST(int_col
AS CHAR),char_col
);
CONCAT()
returns NULL
if any argument is NULL
.
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 Concatenate With Separator and is a special form of CONCAT()
. The first argument is the separator for the rest of the arguments. The separator is added between the strings to be concatenated. The separator can be a string, as can the rest of the arguments. If the separator is NULL
, the result is NULL
.
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'
CONCAT_WS()
does not skip empty strings. However, it does skip any NULL
values after the separator argument.
Converts numbers between different number bases. Returns a string representation of the number N
, converted from base from_base
to base to_base
. Returns NULL
if any argument is NULL
. The argument N
is interpreted as an integer, but may be specified as an integer or a string. The minimum base is 2
and the maximum base is 36
. If to_base
is a negative number, N
is regarded as a signed number. Otherwise, N
is treated as unsigned. CONV()
works 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'
Returns str1
if N
= 1
, str2
if N
= 2
, and so on. Returns NULL
if N
is less than 1
or greater than the number of arguments. ELT()
is the complement of FIELD()
.
mysql>SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej' mysql>SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
EXPORT_SET(
bits
,on
,off
[,separator
[,number_of_bits
]])
Returns a string such that for every bit set in the value bits
, you get an on
string and for every bit not set in the value, you get an off
string. Bits in bits
are examined from right to left (from low-order to high-order bits). Strings are added to the result from left to right, separated by the separator
string (the default being the comma character ‘,
’). The number of bits examined is given by number_of_bits
(defaults to 64).
mysql>SELECT EXPORT_SET(5,'Y','N',',',4);
-> 'Y,N,Y,N' mysql>SELECT EXPORT_SET(6,'1','0',',',10);
-> '0,1,1,0,0,0,0,0,0,0'
Returns the index (position) of str
in the str1
, str2
, str3
, ...
list. Returns 0
if str
is not found.
If all arguments to FIELD()
are strings, all arguments are compared as strings. If all arguments are numbers, they are compared as numbers. Otherwise, the arguments are compared as double.
If str
is NULL
, the return value is 0
because NULL
fails equality comparison with any value. FIELD()
is the complement of ELT()
.
mysql>SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 2 mysql>SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 0
Returns a value in the range of 1 to N
if the string str
is in the string list strlist
consisting of N
substrings. 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 type SET
, the FIND_IN_SET()
function is optimized to use bit arithmetic. Returns 0
if str
is not in strlist
or if strlist
is the empty string. Returns NULL
if either argument is NULL
. This function does not work properly if the first argument contains a comma (‘,
’) character.
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
Formats the number X
to a format like '#,###,###.##'
, rounded to D
decimal places, and returns the result as a string. If D
is 0
, the result has 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'
If N_or_S
is a number, returns a string representation of the hexadecimal value of N
, where N
is a longlong (BIGINT
) number. This is equivalent to CONV(
. N
,10,16)
If N_or_S
is a string, returns a hexadecimal string representation of N_or_S
where each character in N_or_S
is converted to two hexadecimal digits.
mysql>SELECT HEX(255);
-> 'FF' mysql>SELECT 0x616263;
-> 'abc' mysql>SELECT HEX('abc');
-> 616263
Returns the string str
, with the substring beginning at position pos
and len
characters long replaced by the string newstr
. Returns the original string if pos
is not within the length of the string. Replaces the rest of the string from position pos
if len
is not within the length of the rest of the string. Returns NULL
if any argument is NULL
.
mysql>SELECT INSERT('Quadratic', 3, 4, 'What');
-> 'QuWhattic' mysql>SELECT INSERT('Quadratic', -1, 4, 'What');
-> 'Quadratic' mysql>SELECT INSERT('Quadratic', 3, 100, 'What');
-> 'QuWhat'
This function is multi-byte safe.
Returns the position of the first occurrence of substring substr
in string str
. This is the same as the two-argument form of LOCATE()
, except that the order of the arguments is reversed.
mysql>SELECT INSTR('foobarbar', 'bar');
-> 4 mysql>SELECT INSTR('xbar', 'foobar');
-> 0
This function is multi-byte safe, and is case sensitive only if at least one argument is a binary string.
LCASE()
is a synonym for LOWER()
.
Returns the leftmost len
characters from the string str
, or NULL
if any argument is NULL
.
mysql> SELECT LEFT('foobarbar', 5);
-> 'fooba'
Returns the length of the string str
, measured in bytes. A multi-byte character counts as multiple bytes. This means that for a string containing five two-byte characters, LENGTH()
returns 10
, whereas CHAR_LENGTH()
returns 5
.
mysql> SELECT LENGTH('text');
-> 4
Reads the file and returns the file contents as a string. To use this function, the file must be located on the server host, you must specify the full pathname to the file, and you must have the FILE
privilege. The file must be readable by all and its size less than max_allowed_packet
bytes.
If the file does not exist or cannot be read because one of the preceding conditions is not satisfied, the function returns NULL
.
As of MySQL 5.0.19, the character_set_filesystem
system variable controls interpretation of filenames that are given as literal strings.
mysql>UPDATE t
SET blob_col=LOAD_FILE('/tmp/picture')
WHERE id=1;
LOCATE(
, substr
,str
)LOCATE(
substr
,str
,pos
)
The first syntax returns the position of the first occurrence of substring substr
in string str
. The second syntax returns the position of the first occurrence of substring substr
in string str
, starting at position pos
. Returns 0
if substr
is not in str
.
mysql>SELECT LOCATE('bar', 'foobarbar');
-> 4 mysql>SELECT LOCATE('xbar', 'foobar');
-> 0 mysql>SELECT LOCATE('bar', 'foobarbar', 5);
-> 7
This function is multi-byte safe, and is case-sensitive only if at least one argument is a binary string.
Returns the string str
with all characters changed to lowercase according to the current character set mapping. The default is latin1
(cp1252 West European).
mysql> SELECT LOWER('QUADRATICALLY');
-> 'quadratically'
This function is multi-byte safe.
Returns the string str
, left-padded with the string padstr
to a length of len
characters. If str
is longer than len
, the return value is shortened to len
characters.
mysql>SELECT LPAD('hi',4,'??');
-> '??hi' mysql>SELECT LPAD('hi',1,'??');
-> 'h'
Returns the string str
with leading space characters removed.
mysql> SELECT LTRIM(' barbar');
-> 'barbar'
This function is multi-byte safe.
Returns a set value (a string containing substrings separated by ‘,
’ characters) consisting of the strings that have the corresponding bit in bits
set. str1
corresponds to bit 0, str2
to bit 1, and so on. NULL
values in str1
, 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(1 | 4,'hello','nice',NULL,'world');
-> 'hello' mysql>SELECT MAKE_SET(0,'a','b','c');
-> ''
MID(
is a synonym for str
,pos
,len
)SUBSTRING(
.str
,pos
,len
)
Returns a string representation of the octal value of N
, where N
is a longlong (BIGINT
) number. This is equivalent to CONV(
. Returns N
,10,8)NULL
if N
is NULL
.
mysql> SELECT OCT(12);
-> '14'
OCTET_LENGTH()
is a synonym for LENGTH()
.
If the leftmost character of the string str
is a multi-byte character, returns the code for that character, calculated from the numeric values of its constituent bytes using this formula:
(1st byte code) + (2nd byte code Ч 256) + (3rd byte code Ч 2562) ...
If the leftmost character is not a multi-byte character, ORD()
returns the same value as the ASCII()
function.
mysql> SELECT ORD('2');
-> 50
POSITION(
is a synonym for substr
IN str
)LOCATE(
.substr
,str
)
Quotes a string to produce a result that can be used as a properly escaped data value in an SQL statement. The string is returned enclosed by single quotes and with each instance of single quote (‘'
’), backslash (‘\
’), ASCII NUL
, and Control-Z preceded by a backslash. If the argument is NULL
, the return value is the word “NULL” without enclosing single quotes.
mysql>SELECT QUOTE('Don\'t!');
-> 'Don\'t!' mysql>SELECT QUOTE(NULL);
-> NULL
Returns a string consisting of the string str
repeated count
times. If count
is less than 1, returns an empty string. Returns NULL
if str
or count
are NULL
.
mysql> SELECT REPEAT('MySQL', 3);
-> 'MySQLMySQLMySQL'
Returns the string str
with all occurrences of the string from_str
replaced by the string to_str
. REPLACE()
performs a case-sensitive match when searching for from_str
.
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
This function is multi-byte safe.
Returns the string str
with the order of the characters reversed.
mysql> SELECT REVERSE('abc');
-> 'cba'
This function is multi-byte safe.
Returns the rightmost len
characters from the string str
, or NULL
if any argument is NULL
.
mysql> SELECT RIGHT('foobarbar', 4);
-> 'rbar'
This function is multi-byte safe.
Returns the string str
, right-padded with the string padstr
to a length of len
characters. If str
is longer than len
, the return value is shortened to len
characters.
mysql>SELECT RPAD('hi',5,'?');
-> 'hi???' mysql>SELECT RPAD('hi',1,'?');
-> 'h'
This function is multi-byte safe.
Returns the string str
with trailing space characters removed.
mysql> SELECT RTRIM('barbar ');
-> 'barbar'
This function is multi-byte safe.
Returns a soundex string from str
. Two strings that sound almost the same should have identical soundex strings. A standard soundex string is four characters long, but the SOUNDEX()
function returns an arbitrarily long string. You can use SUBSTRING()
on the result to get a standard soundex string. All non-alphabetic characters in str
are ignored. All international alphabetic characters outside the A-Z range are treated as vowels.
Important: When using SOUNDEX()
, you should be aware of the following limitations:
This function, as currently implemented, is intended to work well with strings that are in the English language only. Strings in other languages may not produce reliable results.
This function is not guaranteed to provide consistent results with strings that use multi-byte character sets, including utf-8
.
We hope to remove these limitations in a future release. See Bug#22638 for more information.
mysql>SELECT SOUNDEX('Hello');
-> 'H400' mysql>SELECT SOUNDEX('Quadratically');
-> 'Q36324'
Note: This function implements the original Soundex algorithm, not the more popular enhanced version (also described by D. Knuth). The difference is that original version discards vowels first and duplicates second, whereas the enhanced version discards duplicates first and vowels second.
This is the same as SOUNDEX(
.expr1
) = SOUNDEX(expr2
)
Returns a string consisting of N
space characters.
mysql> SELECT SPACE(6);
-> ' '
SUBSTRING(
, str
,pos
)SUBSTRING(
, str
FROM pos
)SUBSTRING(
, str
,pos
,len
)SUBSTRING(
str
FROM pos
FOR len
)
The forms without a len
argument return a substring from string str
starting at position pos
. The forms with a len
argument return a substring len
characters long from string str
, starting at position pos
. The forms that use FROM
are standard SQL syntax. It is also possible to use a negative value for pos
. In this case, the beginning of the substring is pos
characters from the end of the string, rather than the beginning. A negative value may be used for pos
in any of the forms of this function.
For all forms of SUBSTRING()
, the position of the first character in the string from which the substring is to be extracted is reckoned as 1
.
mysql>SELECT SUBSTRING('Quadratically',5);
-> 'ratically' mysql>SELECT SUBSTRING('foobarbar' FROM 4);
-> 'barbar' mysql>SELECT SUBSTRING('Quadratically',5,6);
-> 'ratica' mysql>SELECT SUBSTRING('Sakila', -3);
-> 'ila' mysql>SELECT SUBSTRING('Sakila', -5, 3);
-> 'aki' mysql>SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
-> 'ki'
This function is multi-byte safe.
If len
is less than 1, the result is the empty string.
SUBSTR()
is a synonym for SUBSTRING()
.
SUBSTRING_INDEX(
str
,delim
,count
)
Returns the substring from string str
before count
occurrences of the delimiter delim
. If count
is positive, everything to the left of the final delimiter (counting from the left) is returned. If count
is negative, everything to the right of the final delimiter (counting from the right) is returned. SUBSTRING_INDEX()
performs a case-sensitive match when searching for delim
.
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.
TRIM([{BOTH | LEADING | TRAILING} [
, remstr
] FROM] str
)TRIM([
remstr
FROM] str
)
Returns the string str
with all remstr
prefixes or suffixes removed. If none of the specifiers BOTH
, LEADING
, or TRAILING
is given, BOTH
is assumed. remstr
is optional and, if 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.
UCASE()
is a synonym for UPPER()
.
Performs the inverse operation of HEX(
. That is, it interprets each pair of hexadecimal digits in the argument as a number and converts it to the character represented by the number. The resulting characters are returned as a binary string.str
)
mysql>SELECT UNHEX('4D7953514C');
-> 'MySQL' mysql>SELECT 0x4D7953514C;
-> 'MySQL' mysql>SELECT UNHEX(HEX('string'));
-> 'string' mysql>SELECT HEX(UNHEX('1267'));
-> '1267'
The characters in the argument string must be legal hexadecimal digits: '0'
.. '9'
, 'A'
.. 'F'
, 'a'
.. 'f'
. If UNHEX()
encounters any non-hexadecimal digits in the argument, it returns NULL
:
mysql> SELECT UNHEX('GG');
+-------------+
| UNHEX('GG') |
+-------------+
| NULL |
+-------------+
A NULL
result can occur if the argument to UNHEX()
is a BINARY
column, because values are padded with 0x00 bytes when stored but those bytes are not stripped on retrieval. For example 'aa'
is stored into a CHAR(3)
column as 'aa '
and retrieved as 'aa'
(with the trailing pad space stripped), so UNHEX()
for the column value returns 'A'
. By contrast 'aa'
is stored into a BINARY(3)
column as 'aa\0'
and retrieved as 'aa\0'
(with the trailing pad 0x00
byte not stripped). '\0'
is not a legal hexadecimal digit, so UNHEX()
for the column value returns NULL
.
Returns the string str
with all characters changed to uppercase according to the current character set mapping. The default is latin1
(cp1252 West European).
mysql> SELECT UPPER('Hej');
-> 'HEJ'
This function is multi-byte safe.
Name | Description |
---|---|
<=> | NULL-safe equal to operator |
= | Equal operator |
>= | Greater than or equal operator |
> | Greater than operator |
IS NULL | NULL value test |
IS | Test a value against a boolean |
<= | Less than or equal operator |
< | Less than operator |
LIKE | Simple pattern matching |
!= , <> | Not equal operator |
NOT LIKE | Negation of simple pattern matching |
SOUNDS LIKE (v4.1.0) | Compare sounds |
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 affects only 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
) or 0
(FALSE
). If either expr
or pat
is NULL
, the result is NULL
.
The pattern need not be a literal string. For example, it can be specified as a string expression or table column.
Per the SQL standard, LIKE
performs matching on a per-character basis, thus it can produce results different from the =
comparison operator:
mysql>SELECT 'д' LIKE 'ae' COLLATE latin1_german2_ci;
+-----------------------------------------+ | 'д' LIKE 'ae' COLLATE latin1_german2_ci | +-----------------------------------------+ | 0 | +-----------------------------------------+ mysql>SELECT 'д' = 'ae' COLLATE latin1_german2_ci;
+--------------------------------------+ | 'д' = 'ae' COLLATE latin1_german2_ci | +--------------------------------------+ | 1 | +--------------------------------------+
With LIKE
you can use the following two wildcard characters in the pattern:
Character | Description |
% | 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 wildcard character, precede it by the escape character. If you do not specify the ESCAPE
character, ‘\
’ is assumed.
String | Description |
\% | 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 the ESCAPE
clause:
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
The escape sequence should be empty or one character long. As of MySQL 5.0.16, if the NO_BACKSLASH_ESCAPES
SQL mode is enabled, the sequence cannot be empty.
The following two statements illustrate that string comparisons are not case sensitive unless one of the operands is a binary string:
mysql>SELECT 'abc' LIKE 'ABC';
-> 1 mysql>SELECT 'abc' LIKE BINARY 'ABC';
-> 0
In MySQL, LIKE
is allowed on numeric expressions. (This is an extension to the standard SQL LIKE
.)
mysql> SELECT 10 LIKE '1%';
-> 1
Note: Because MySQL uses C escape syntax in strings (for example, ‘\n
’ to represent a newline character), you must double any ‘\
’ that you use in LIKE
strings. For example, to search for ‘\n
’, specify it as ‘\\n
’. To search for ‘\
’, specify it as ‘\\\\
’; this is because the backslashes are stripped once by the parser and again when the pattern match is made, leaving a single backslash to be matched against. (Exception: At the end of the pattern string, backslash can be specified as ‘\\
’. At the end of the string, backslash stands for itself because there is nothing following to escape.)
expr
NOT LIKE pat
[ESCAPE 'escape_char
']
This is the same as NOT (
. expr
LIKE pat
[ESCAPE 'escape_char
'])
Aggregate queries involving NOT LIKE
comparisons with columns containing NULL
may yield unexpected results. For example, consider the following table and data:
CREATE TABLE foo (bar VARCHAR(10)); INSERT INTO foo VALUES (NULL), (NULL);
The query SELECT COUNT(*) FROM foo WHERE bar LIKE '%baz%';
returns 0
. You might assume that SELECT COUNT(*) FROM foo WHERE bar NOT LIKE '%baz%';
would return 2
. However, this is not the case: The second query returns 0
. This is because NULL NOT LIKE
always returns expr
NULL
, regardless of the value of expr
. The same is true for aggregate queries involving NULL
and comparisons using NOT RLIKE
or NOT REGEXP
. In such cases, you must test explicitly for NOT NULL
using OR
(and not AND
), as shown here:
SELECT COUNT(*) FROM foo WHERE bar NOT LIKE '%baz%' OR bar IS NULL;
, expr
NOT REGEXP pat
expr
NOT RLIKE pat
This is the same as NOT (
.expr
REGEXP pat
)
, expr
REGEXP pat
expr
RLIKE pat
Performs a pattern match of a string expression expr
against a pattern pat
. The pattern can be an extended regular expression. The syntax for regular expressions is discussed in Section 12.4.2, “Regular Expressions”. Returns 1
if expr
matches pat
; otherwise it returns 0
. If either expr
or pat
is NULL
, the result is NULL
. RLIKE
is a synonym for REGEXP
, provided for mSQL
compatibility.
The pattern need not be a literal string. For example, it can be specified as a string expression or table column.
Note: Because MySQL uses the C escape syntax in strings (for example, ‘\n
’ to represent the newline character), you must double any ‘\
’ that you use in your REGEXP
strings.
REGEXP
is not case sensitive, except when used with 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
REGEXP
and RLIKE
use the current character set when deciding the type of a character. The default is latin1
(cp1252 West European). Warning: These operators are not multi-byte safe.
STRCMP()
returns 0
if the strings are the same, -1
if the first argument is smaller than the second according to the current sort order, and 1
otherwise.
mysql>SELECT STRCMP('text', 'text2');
-> -1 mysql>SELECT STRCMP('text2', 'text');
-> 1 mysql>SELECT STRCMP('text', 'text');
-> 0
STRCMP()
uses the current character set when performing comparisons. This makes the default comparison behavior case insensitive unless one or both of the operands are binary strings.
Name | Description |
---|---|
NOT REGEXP | Negation of REGEXP |
REGEXP | Pattern matching using regular expressions |
RLIKE | Synonym for REGEXP |
A regular expression is a powerful way of specifying a pattern for a complex search.
MySQL uses Henry Spencer's implementation of regular expressions, which is aimed at conformance with POSIX 1003.2. See Appendix G, Credits. MySQL uses the extended version to support pattern-matching operations performed with the REGEXP
operator in SQL statements. See Section 3.3.4.7, “Pattern Matching”, and Section 12.4.1, “String Comparison Functions”.
This section is a summary, with examples, of the special characters and constructs that can be used in MySQL for REGEXP
operations. It does not contain all the details that can be found in Henry Spencer's regex(7)
manual page. That manual page is included in MySQL source distributions, in the regex.7
file under the regex
directory.
A regular expression describes a set of strings. The simplest regular expression is one that has no special characters in it. For example, the regular expression hello
matches hello
and nothing else.
Non-trivial regular expressions use certain special constructs so that they can match more than one string. For example, the regular expression hello|word
matches either the string hello
or the string word
.
As a more complex example, the regular expression B[an]*s
matches any of the strings Bananas
, Baaaaas
, Bs
, and any other string starting with a B
, ending with an s
, and containing any number of a
or n
characters in between.
A regular expression for the REGEXP
operator may use any of the following special characters and constructs:
^
Match the beginning of a string.
mysql>SELECT 'fo\nfo' REGEXP '^fo$';
-> 0 mysql>SELECT 'fofo' REGEXP '^fo';
-> 1
$
Match the end of a string.
mysql>SELECT 'fo\no' REGEXP '^fo\no$';
-> 1 mysql>SELECT 'fo\no' REGEXP '^fo$';
-> 0
.
Match any character (including carriage return and newline).
mysql>SELECT 'fofo' REGEXP '^f.*$';
-> 1 mysql>SELECT 'fo\r\nfo' REGEXP '^f.*$';
-> 1
a*
Match any sequence of zero or more a
characters.
mysql>SELECT 'Ban' REGEXP '^Ba*n';
-> 1 mysql>SELECT 'Baaan' REGEXP '^Ba*n';
-> 1 mysql>SELECT 'Bn' REGEXP '^Ba*n';
-> 1
a+
Match any sequence of one or more a
characters.
mysql>SELECT 'Ban' REGEXP '^Ba+n';
-> 1 mysql>SELECT 'Bn' REGEXP '^Ba+n';
-> 0
a?
Match either zero or one a
character.
mysql>SELECT 'Bn' REGEXP '^Ba?n';
-> 1 mysql>SELECT 'Ban' REGEXP '^Ba?n';
-> 1 mysql>SELECT 'Baan' REGEXP '^Ba?n';
-> 0
de|abc
Match either of the sequences de
or abc
.
mysql>SELECT 'pi' REGEXP 'pi|apa';
-> 1 mysql>SELECT 'axe' REGEXP 'pi|apa';
-> 0 mysql>SELECT 'apa' REGEXP 'pi|apa';
-> 1 mysql>SELECT 'apa' REGEXP '^(pi|apa)$';
-> 1 mysql>SELECT 'pi' REGEXP '^(pi|apa)$';
-> 1 mysql>SELECT 'pix' REGEXP '^(pi|apa)$';
-> 0
(abc)*
Match zero or more instances of the sequence abc
.
mysql>SELECT 'pi' REGEXP '^(pi)*$';
-> 1 mysql>SELECT 'pip' REGEXP '^(pi)*$';
-> 0 mysql>SELECT 'pipi' REGEXP '^(pi)*$';
-> 1
{1}
, {2,3}
{n}
or {m,n}
notation provides a more general way of writing regular expressions that match many occurrences of the previous atom (or “piece”) of the pattern. m
and n
are integers.
a*
Can be written as a{0,}
.
a+
Can be written as a{1,}
.
a?
Can be written as a{0,1}
.
To be more precise, a{n}
matches exactly n
instances of a
. a{n,}
matches n
or more instances of a
. a{m,n}
matches m
through n
instances of a
, inclusive.
m
and n
must be in the range from 0
to RE_DUP_MAX
(default 255), inclusive. If both m
and n
are given, m
must be less than or equal to n
.
mysql>SELECT 'abcde' REGEXP 'a[bcd]{2}e';
-> 0 mysql>SELECT 'abcde' REGEXP 'a[bcd]{3}e';
-> 1 mysql>SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';
-> 1
[a-dX]
, [^a-dX]
Matches any character that is (or is not, if ^ is used) either a
, b
, c
, d
or X
. A -
character between two other characters forms a range that matches all characters from the first character to the second. For example, [0-9]
matches any decimal digit. To include a literal ]
character, it must immediately follow the opening bracket [
. To include a literal -
character, it must be written first or last. Any character that does not have a defined special meaning inside a []
pair matches only itself.
mysql>SELECT 'aXbc' REGEXP '[a-dXYZ]';
-> 1 mysql>SELECT 'aXbc' REGEXP '^[a-dXYZ]$';
-> 0 mysql>SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';
-> 1 mysql>SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$';
-> 0 mysql>SELECT 'gheis' REGEXP '^[^a-dXYZ]+$';
-> 1 mysql>SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$';
-> 0
[.characters.]
Within a bracket expression (written using [
and ]
), matches the sequence of characters of that collating element. characters
is either a single character or a character name like newline
. The following table lists the allowable character names.
The following table shows the allowable character names and the characters that they match. For characters given as numeric values, the values are represented in octal.
Name | Character | Name | Character |
NUL | 0 | SOH | 001 |
STX | 002 | ETX | 003 |
EOT | 004 | ENQ | 005 |
ACK | 006 | BEL | 007 |
alert | 007 | BS | 010 |
backspace | '\b' | HT | 011 |
tab | '\t' | LF | 012 |
newline | '\n' | VT | 013 |
vertical-tab | '\v' | FF | 014 |
form-feed | '\f' | CR | 015 |
carriage-return | '\r' | SO | 016 |
SI | 017 | DLE | 020 |
DC1 | 021 | DC2 | 022 |
DC3 | 023 | DC4 | 024 |
NAK | 025 | SYN | 026 |
ETB | 027 | CAN | 030 |
EM | 031 | SUB | 032 |
ESC | 033 | IS4 | 034 |
FS | 034 | IS3 | 035 |
GS | 035 | IS2 | 036 |
RS | 036 | IS1 | 037 |
US | 037 | space | ' ' |
exclamation-mark | '!' | quotation-mark | '"' |
number-sign | '#' | dollar-sign | '$' |
percent-sign | '%' | ampersand | '&' |
apostrophe | '\'' | left-parenthesis | '(' |
right-parenthesis | ')' | asterisk | '*' |
plus-sign | '+' | comma | ',' |
hyphen | '-' | hyphen-minus | '-' |
period | '.' | full-stop | '.' |
slash | '/' | solidus | '/' |
zero | '0' | one | '1' |
two | '2' | three | '3' |
four | '4' | five | '5' |
six | '6' | seven | '7' |
eight | '8' | nine | '9' |
colon | ':' | semicolon | ';' |
less-than-sign | '<' | equals-sign | '=' |
greater-than-sign | '>' | question-mark | '?' |
commercial-at | '@' | left-square-bracket | '[' |
backslash | '\\' | reverse-solidus | '\\' |
right-square-bracket | ']' | circumflex | '^' |
circumflex-accent | '^' | underscore | '_' |
low-line | '_' | grave-accent | '`' |
left-brace | '{' | left-curly-bracket | '{' |
vertical-line | '|' | right-brace | '}' |
right-curly-bracket | '}' | tilde | '~' |
DEL | 177 |
mysql>SELECT '~' REGEXP '[[.~.]]';
-> 1 mysql>SELECT '~' REGEXP '[[.tilde.]]';
-> 1
[=character_class=]
Within a bracket expression (written using [
and ]
), [=character_class=]
represents an equivalence class. It matches all characters with the same collation value, including itself. For example, if o
and (+)
are the members of an equivalence class, then [[=o=]]
, [[=(+)=]]
, and [o(+)]
are all synonymous. An equivalence class may not be used as an endpoint of a range.
[:character_class:]
Within a bracket expression (written using [
and ]
), [:character_class:]
represents a character class that matches all characters belonging to that class. The following table lists the standard class names. These names stand for the character classes defined in the ctype(3)
manual page. A particular locale may provide other class names. A character class may not be used as an endpoint of a range.
alnum | Alphanumeric characters |
alpha | Alphabetic characters |
blank | Whitespace characters |
cntrl | Control characters |
digit | Digit characters |
graph | Graphic characters |
lower | Lowercase alphabetic characters |
print | Graphic or space characters |
punct | Punctuation characters |
space | Space, tab, newline, and carriage return |
upper | Uppercase alphabetic characters |
xdigit | Hexadecimal digit characters |
mysql>SELECT 'justalnums' REGEXP '[[:alnum:]]+';
-> 1 mysql>SELECT '!!' REGEXP '[[:alnum:]]+';
-> 0
[[:<:]]
, [[:>:]]
These markers stand for word boundaries. They match the beginning and end of words, respectively. A word is a sequence of word characters that is not preceded by or followed by word characters. A word character is an alphanumeric character in the alnum
class or an underscore (_
).
mysql>SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';
-> 1 mysql>SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';
-> 0
To use a literal instance of a special character in a regular expression, precede it by two backslash (\) characters. The MySQL parser interprets one of the backslashes, and the regular expression library interprets the other. For example, to match the string 1+2
that contains the special +
character, only the last of the following regular expressions is the correct one:
mysql>SELECT '1+2' REGEXP '1+2';
-> 0 mysql>SELECT '1+2' REGEXP '1\+2';
-> 0 mysql>SELECT '1+2' REGEXP '1\\+2';
-> 1