Heim >Datenbank >MySQL-Tutorial >MySQL Basic Tutorial 7 – Funktion String-Funktion

MySQL Basic Tutorial 7 – Funktion String-Funktion

黄舟
黄舟Original
2017-02-24 11:15:07924Durchsuche

Wenn die Länge des Ergebnisses größer als der Maximalwert der Systemvariablen max_allowed_packet ist, ist der Rückgabewert der Zeichenfolgenwertfunktion NULL.

Bei Funktionen, die mit String-Positionen arbeiten, ist die erste Position mit 1 nummeriert.

  • ASCII(str)

Der Rückgabewert ist das Zeichen ganz links in der Zeichenfolge str Wert. Wenn str eine leere Zeichenfolge ist, ist der Rückgabewert 0. Wenn str NULL ist, ist der Rückgabewert NULL. ASCII() wird für Zeichen mit numerischen Werten von 0 bis 255 verwendet.

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

Siehe Funktion ORD().

  • BIN(N)

gibt einen String mit dem Binärwert von N zurück , wobei N eine Longlong-Zahl (BIGINT) ist. Dies entspricht CONV(N,10,2). Wenn N NULL ist, ist der Rückgabewert NULL.

mysql> SELECT BIN(12);
-> '1100'
  • BIT_LENGTH(str)

Der Rückgabewert ist eine binäre Zeichenfolge str Länge.

mysql> SELECT BIT_LENGTH('text');
-> 32
  • CHAR(N,... [USING charset])

CHAR() versteht jeden Parameter N als Ganzzahl und sein Rückgabewert ist eine Zeichenfolge, die die durch die Codewerte dieser Ganzzahlen gegebenen Zeichen enthält. NULL-Werte werden weggelassen.

mysql> SELECT CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql> SELECT CHAR(77,77.3,'77.3');
-> 'MMM'

CHAR()-Parameter größer als 255 werden in Zeichen mit mehreren Ergebnissen umgewandelt. Beispielsweise entspricht CHAR(256) CHAR(1,0) und CHAR(256*256) entspricht 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             |
+------------------+--------------------+

Der Rückgabewert von CHAR () ist eine binäre Zeichenfolge. Sie können optional die USING-Anweisung verwenden, um eine Zeichenfolge im angegebenen Zeichensatz zu generieren:

mysql>

Eine Warnung wird ausgegeben, wenn USING generiert wurde und die resultierende Zeichenfolge nicht dem angegebenen Zeichensatz entspricht. Wenn der strikte SQL-Modus aktiviert ist, ist das Ergebnis von CHAR() ebenfalls NULL.
mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));+---------------------+--------------------------------+
| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |
+---------------------+--------------------------------+
| binary              | utf8                           |
+---------------------+--------------------------------+

    CHAR_LENGTH(
  • str

    )

  • Der Rückgabewert ist die Länge der Zeichenfolge
str

, Länge Die Einheit sind Zeichen. Ein Multibyte-Zeichen zählt als einzelnes Zeichen. Für ein , das fünf Zwei-Byte-Zeichensätze enthält, ist der Rückgabewert von LENGTH() 10 und der Rückgabewert von CHAR_LENGTH() ist 5.

    CHARACTER_LENGTH(
  • str

    )

  • CHARACTER_LENGTH() ist ein Synonym für CHAR_LENGTH().

    COMPRESS(
  • string_to_compress

    )

  • Komprimiert einen String. Diese Funktion erfordert, dass MySQL mit einer Komprimierungsbibliothek wie zlib komprimiert wurde. Ansonsten ist der Rückgabewert immer NULL. UNCOMPRESS() kann die komprimierte Zeichenfolge dekomprimieren.

Der Inhalt der komprimierten Zeichenfolge wird wie folgt gespeichert:
mysql> SELECT LENGTH(COMPRESS(REPEAT('a',1000)));
-> 21
mysql> SELECT LENGTH(COMPRESS(''));
-> 0
mysql> SELECT LENGTH(COMPRESS('a'));
-> 13
mysql> SELECT LENGTH(COMPRESS(REPEAT('a',16)));
-> 15

      Leere Zeichenfolgen werden als leere Zeichenfolgen gespeichert.
    • Nicht leere Zeichenfolge Die Länge von vier Bytes der unkomprimierten Zeichenfolge wird gespeichert (niedriges Byte zuerst), gefolgt von der komprimierten Zeichenfolge. Wenn die Zeichenfolge mit einem Leerzeichen endet, wird am Ende ein „.“ hinzugefügt, um zu verhindern, dass die nachfolgenden Leerzeichen automatisch entfernt werden, wenn der Ergebniswert in einer Feldspalte vom Typ CHAR oder VARCHAR gespeichert wird. (Es wird nicht empfohlen, CHAR oder VARCHAR zum Speichern komprimierter Zeichenfolgen zu verwenden. Es ist besser, stattdessen eine BLOB-Spalte zu verwenden.)
    CONCAT(
  • str1

    ,str2,...)

  • Zurück Das Ergebnis ist die durch die Verbindungsparameter erzeugte Zeichenfolge. Wenn ein Parameter NULL ist, ist der Rückgabewert NULL. Es kann einen oder mehrere Parameter geben. Wenn alle Argumente nicht-binäre Zeichenfolgen sind, ist das Ergebnis eine nicht-binäre Zeichenfolge. Wenn das Argument eine Binärzeichenfolge enthält, ist das Ergebnis eine Binärzeichenfolge. Ein numerisches Argument wird in sein entsprechendes binäres Zeichenfolgenformat konvertiert. Um dies zu vermeiden, verwenden Sie eine explizite Typumwandlung, zum Beispiel: SELECT

CONCAT(CAST(int_col AS CHAR), char_col)
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() stellt CONCAT With Separator dar, was eine CONCAT( )-Sonderform ist. Der erste Parameter ist das Trennzeichen für andere Parameter. Die Position des Trennzeichens wird zwischen den beiden zu verkettenden Zeichenfolgen platziert. Das Trennzeichen kann eine Zeichenfolge oder ein anderer Parameter sein. Wenn das Trennzeichen NULL ist, ist das Ergebnis NULL. Die Funktion ignoriert NULL-Werte nach jedem Trennzeichenargument.

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()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
    CONV(
  • N

    ,from_base,to_base)

不同数基间转换数字。返回值为数字的N字符串表示,由from_base基转化为 to_base 基。如有任意一个参数为NULL,则返回值为 NULL。自变量 N 被理解为一个整数,但是可以被指定为一个整数或字符串。最小基数为 2 ,而最大基数则为36。 If to_base 是一个负数,则 N 被看作一个带符号数。否则, N 被看作无符号数。 CONV() 的运行精确度为 64比特。

mysql> SELECT CONV('a',16,2);
-> '1010'
mysql> SELECT CONV('6E',18,8);
-> '172'
mysql> SELECT CONV(-17,10,-18);
-> '-H'
mysql> SELECT CONV(10+'10'+'10'+0xa,10,10);
-> '40'
  • ELT(N,str1,str2,str3,...)

N = 1,则返回值为  str1 ,若N = 2,则返回值为 str2 ,以此类推。   若N 小于1或大于参数的数目,则返回值为 NULL。 ELT() 是  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]])

返回值为一个字符串,其中对于bits值中的每个位组,可以得到一个 on 字符串,而对于每个清零比特位,可以得到一个off字符串。bits 中的比特值按照从右到左的顺序接受检验 (由低位比特到高位比特)。字符串被分隔字符串分开(默认为逗号‘,’),按照从左到右的顺序被添加到结果中。number_of_bits 会给出被检验的二进制位数 (默认为 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'
  • FIELD(str,str1,str2,str3,...)

返回值为str1str2str3,……列表中的str 指数。在找不到str 的情况下,返回值为 0 。

如果所有对于FIELD() 的参数均为字符串,则所有参数均按照字符串进行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数按照双倍进行比较。

如果str 为NULL,则返回值为0 ,原因是NULL不能同任何值进行同等比较。FIELD() 是ELT()的补数。

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

假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
  • FORMAT(X,D)

将number X设置为格式 '#,###,###.##', 以四舍五入的方式保留到小数点后D位, 而返回结果为一个字符串。

  • HEX(N_or_S)

如果N_OR_S 是一个数字,则返回一个 十六进制值 N 的字符串表示,在这里,   N 是一个longlong (BIGINT)数。这相当于 CONV(N,10,16)。

如果N_OR_S 是一个字符串,则返回值为一个N_OR_S的十六进制字符串表示, 其中每个N_OR_S 里的每个字符被转化为两个十六进制数字。

mysql> SELECT HEX(255);
-> 'FF'
mysql> SELECT 0x616263;
-> 'abc'
mysql> SELECT HEX('abc');
-> 616263
  • INSERT(str,pos,len,newstr)

返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符。  如果pos 超过字符串长度,则返回值为原始字符串。 假如len的长度大于其它字符串的长度,则从位置pos开始替换。若任何一个参数为null,则返回值为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'

这个函数支持多字节字元。

  • INSTR(str,substr)

返回字符串 str 中子字符串的第一个出现位置。这和LOCATE()的双参数形式相同,除非参数的顺序被颠倒。

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

这个函数支持多字节字元,并且只有当至少有一个参数是二进制字符串时区分大小写。

  • LCASE(str)

LCASE() 是 LOWER()的同义词。

  • LEFT(str,len)

返回从字符串str 开始的len 最左字符。

mysql> SELECT LEFT('foobarbar', 5);
-> 'fooba'
  • LENGTH(str)

返回值为字符串str 的长度,单位为字节。一个多字节字符算作多字节。这意味着 对于一个包含5个2字节字符的字符串,LENGTH() 的返回值为 10, 而 CHAR_LENGTH()的返回值则为5。

mysql> SELECT LENGTH('text');
-> 4
  • LOAD_FILE(file_name)

读取文件并将这一文件按照字符串的格式返回。 文件的位置必须在服务器上,你必须为文件制定路径全名,而且你还必须拥有FILE 特许权。文件必须可读取,文件容量必须小于 max_allowed_packet字节。

若文件不存在,或因不满足上述条件而不能被读取, 则函数返回值为 NULL。

mysql> UPDATE tbl_name
SET blob_column=LOAD_FILE('/tmp/picture')
WHERE id=1;
  • LOCATE(substr,str) , LOCATE(substr,str,pos)

第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。

mysql> SELECT LOCATE('bar', 'foobarbar');
-> 4
mysql> SELECT LOCATE('xbar', 'foobar');
-> 0
mysql> SELECT LOCATE('bar', 'foobarbar',5);
-> 7

这个函数支持多字节字元,并且只有当至少有一个参数是二进制字符串时区分大小写。

  • LOWER(str)

返回字符串 str 以及所有根据最新的字符集映射表变为小写字母的字符 (默认为  cp1252 Latin1)。

mysql> SELECT LOWER('QUADRATICALLY');
-> 'quadratically'
这个函数支持多字节字元。
  • LPAD(str,len,padstr)

返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。假如str 的长度大于len, 则返回值被缩短至 len 字符。

mysql> SELECT LPAD('hi',4,'??');
-> '??hi'
mysql> SELECT LPAD('hi',1,'??');
-> 'h'
  • LTRIM(str)

返回字符串 str ,其引导空格字符被删除。

mysql> SELECT LTRIM('  barbar');
-> 'barbar'

这个函数支持多字节字元。

  • MAKE_SET(bits,str1,str2,...)

返回一个设定值 (一个包含被‘,’号分开的字字符串的字符串) ,由在bits 组中具有相应的比特的字符串组成。str1 对应比特 0,str2 对应比特1,以此类推。str1str2, ...中的 NULL值不会被添加到结果中。

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(str,pos,len)

MID(str,pos,len) 是 SUBSTRING(str,pos,len)的同义词。

  • OCT(N)

返回一个 N的八进制值的字符串表示,其中 N 是一个longlong (BIGINT)数。这等同于CONV(N,10,8)。若N 为 NULL ,则返回值为NULL。

mysql> SELECT OCT(12);
-> '14'
  • OCTET_LENGTH(str)

OCTET_LENGTH() 是 LENGTH()的同义词。

  • ORD(str)

若字符串str 的最左字符是一个多字节字符,则返回该字符的代码, 代码的计算通过使用以下公式计算其组成字节的数值而得出:

   (1st byte code)
+ (2nd byte code × 256)
+ (3rd byte code × 2562) ...

 

假如最左字符不是一个多字节字符,那么 ORD()和函数ASCII()返回相同的值。

mysql> SELECT ORD('2');
-> 50
  • POSITION(substr IN str)

POSITION(substr IN str)是 LOCATE(substr,str)同义词。

  • QUOTE(str)

引证一个字符串,由此产生一个在SQL语句中可用作完全转义数据值的结果。  返回的字符串由单引号标注,每例都带有单引号 (‘'’)、 反斜线符号 (‘\’)、 ASCII NUL以及前面有反斜线符号的Control-Z 。如果自变量的值为NULL, 则返回不带单引号的单词 “NULL”。

mysql> SELECT QUOTE('Don\'t!');
-> 'Don\'t!'
mysql> SELECT QUOTE(NULL);
-> NULL
  • REPEAT(str,count)

返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。 若 count <= 0,则返回一个空字符串。若str 或count 为 NULL,则返回 NULL 。

mysql> SELECT REPEAT(&#39;MySQL&#39;, 3);
-> &#39;MySQLMySQLMySQL&#39;
  • REPLACE(str,from_str,to_str)

返回字符串str 以及所有被字符串to_str替代的字符串from_str 。

mysql> SELECT REPLACE(&#39;www.mysql.com&#39;, &#39;w&#39;, &#39;Ww&#39;);
-> &#39;WwWwWw.mysql.com&#39;

这个函数支持多字节字元。

  • REVERSE(str)

返回字符串 str ,顺序和字符顺序相反。

mysql> SELECT REVERSE(&#39;abc&#39;);
-> &#39;cba&#39;

这个函数支持多字节字元。

  • RIGHT(str,len)

从字符串str 开始,返回最右len 字符。

mysql> SELECT RIGHT(&#39;foobarbar&#39;, 4);
-> &#39;rbar&#39;

这个函数支持多字节字元。

  • RPAD(str,len,padstr)

返回字符串str, 其右边被字符串 padstr填补至len 字符长度。假如字符串str 的长度大于 len,则返回值被缩短到与 len 字符相同长度。

mysql> SELECT RPAD(&#39;hi&#39;,5,&#39;?&#39;);
-> &#39;hi???&#39;
mysql> SELECT RPAD(&#39;hi&#39;,1,&#39;?&#39;);
-> &#39;h&#39;

这个函数支持多字节字元。

  • RTRIM(str)

返回字符串 str ,结尾空格字符被删去。

mysql> SELECT RTRIM(&#39;barbar   &#39;);
-> &#39;barbar&#39;

这个函数支持多字节字元。

  • SOUNDEX(str)

str返回一个soundex字符串。 两个具有几乎同样探测的字符串应该具有同样的 soundex 字符串。一个标准的soundex字符串的长度为4个字符,然而SOUNDEX() 函数会返回一个人以长度的字符串。 可使用结果中的SUBSTRING() 来得到一个标准 soundex 字符串。在str会忽略所有未按照字母顺序排列的字符。 所有不在A-Z范围之内的国际字母符号被视为元音字母。

mysql> SELECT SOUNDEX(&#39;Hello&#39;);
-> &#39;H400&#39;
mysql> SELECT SOUNDEX(&#39;Quadratically&#39;);
-> &#39;Q36324&#39;

注意:这个函数执行原始的Soundex算法,而非更加流行的加强版本(如D. Knuth所述)。其区别在于原始版本首先会删去元音,其次是重复,而加强版则首先删去重复,而后删去元音。

  • expr1 SOUNDS LIKE expr2

这相当于SOUNDEX(expr1) = SOUNDEX(expr2)。

  • SPACE(N)

返回一个由N 间隔符号组成的字符串。

mysql> SELECT SPACE(6);
-> &#39;      &#39;
  • SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)

不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。

mysql> SELECT SUBSTRING(&#39;Quadratically&#39;,5);
-> &#39;ratically&#39;
mysql> SELECT SUBSTRING(&#39;foobarbar&#39; FROM 4);
-> &#39;barbar&#39;
mysql> SELECT SUBSTRING(&#39;Quadratically&#39;,5,6);
-> &#39;ratica&#39;
mysql> SELECT SUBSTRING(&#39;Sakila&#39;, -3);
-> &#39;ila&#39;
mysql> SELECT SUBSTRING(&#39;Sakila&#39;, -5, 3);
-> &#39;aki&#39;
mysql> SELECT SUBSTRING(&#39;Sakila&#39; FROM -4 FOR 2);
-> &#39;ki&#39;

这个函数支持多字节字元。

注意,如果对len使用的是一个小于1的值,则结果始终为空字符串。

SUBSTR()是 SUBSTRING()的同义词。

  • SUBSTRING_INDEX(str,delim,count)

在定界符 delim 以及count 出现前,从字符串str返回自字符串。若count为正值,则返回最终定界符(从左边开始)左边的一切内容。若count为负值,则返回定界符(从右边开始)右边的一切内容。

mysql> SELECT SUBSTRING_INDEX(&#39;www.mysql.com&#39;, &#39;.&#39;, 2);
-> &#39;www.mysql&#39;
mysql> SELECT SUBSTRING_INDEX(&#39;www.mysql.com&#39;, &#39;.&#39;, -2);
-> &#39;mysql.com&#39;

这个函数支持多字节字元。

  • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)

返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格。

mysql> SELECT TRIM(&#39;  bar   &#39;);
-> &#39;bar&#39;
mysql> SELECT TRIM(LEADING &#39;x&#39; FROM &#39;xxxbarxxx&#39;);
-> &#39;barxxx&#39;
mysql> SELECT TRIM(BOTH &#39;x&#39; FROM &#39;xxxbarxxx&#39;);
-> &#39;bar&#39;
mysql> SELECT TRIM(TRAILING &#39;xyz&#39; FROM &#39;barxxyz&#39;);
-> &#39;barx&#39;

这个函数支持多字节字元。

  • UCASE(str)

UCASE()是UPPER()的同义词。

  • UNCOMPRESS(string_to_uncompress)

对经COMPRESS()函数压缩后的字符串进行解压缩。若参数为压缩值,则结果为 NULL。这个函数要求  MySQL 已被诸如zlib 之类的压缩库编译过。否则, 返回值将始终是 NULL。

mysql> SELECT UNCOMPRESS(COMPRESS(&#39;any string&#39;));
-> &#39;any string&#39;
mysql> SELECT UNCOMPRESS(&#39;any string&#39;);
-> NULL
  • UNCOMPRESSED_LENGTH(compressed_string)

返回压缩字符串压缩前的长度。

mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT(&#39;a&#39;,30)));
-> 30
  • UNHEX(str)

执行从HEX(str)的反向操作。就是说,它将参数中的每一对十六进制数字理解为一个数字,并将其转化为该数字代表的字符。结果字符以二进制字符串的形式返回。

mysql> SELECT UNHEX(&#39;4D7953514C&#39;);
-> &#39;MySQL&#39;
mysql> SELECT 0x4D7953514C;
-> &#39;MySQL&#39;
mysql> SELECT UNHEX(HEX(&#39;string&#39;));
-> &#39;string&#39;
mysql> SELECT HEX(UNHEX(&#39;1267&#39;));
-> &#39;1267&#39;
  • UPPER(str)

返回字符串str, 以及根据最新字符集映射转化为大写字母的字符 (默认为cp1252 Latin1).

mysql> SELECT UPPER(&#39;Hej&#39;);
-> &#39;HEJ&#39;

该函数支持多字节字元。

1. 字符串比较函数

根据,MySQL 会自动将数字转化为字符串,反之亦然。

mysql> SELECT 1+&#39;1&#39;;
-> 2
mysql> SELECT CONCAT(2,&#39; test&#39;);
-> &#39;2 test&#39;

若想要将数字明确地转化为字符串,可使用 CAST()或 CONCAT()函数:

mysql> SELECT 38.8, CAST(38.8 AS CHAR);
-> 38.8, &#39;38.8&#39;
mysql> SELECT 38.8, CONCAT(38.8);
-> 38.8, &#39;38.8&#39;

CAST() 比较可取。.

若已经对一个字符串函数给定一个二进制字符串作为参数, 则所得到的结果字符串也是一个二进制字符串。一个转化为字符串的数字被作为二进制字符串对待。这仅会对比较结果产生影响。

一般而言, 若字符串比较中任意一个表达式是区分大小写的,则执行比较时也区分大小写。

  • expr LIKE pat [ESCAPE 'escape-char']

模式匹配,使用SQL简单正规表达式比较。返回1 (TRUE) 或 0 (FALSE)。 若 expr 或 pat 中任何一个为 NULL,则结果为NULL。

模式不需要为文字字符串。例如,可以被指定为一个字符串表达式或表列。

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

字符 说明
% 匹配任何数目的字符,甚至包括零字符
_ 只能匹配一种字符
mysql> SELECT &#39;David!&#39; LIKE &#39;David_&#39;;
-> 1
mysql> SELECT &#39;David!&#39; LIKE &#39;%D%v%&#39;;
-> 1

若要对通配符的文字实例进行检验, 可将转义字符放在该字符前面。如果没有指定 ESCAPE字符, 则假设为‘\’。

字符串 说明
\% 匹配一个  ‘%’字符
\_ 匹配一个 ‘_’ 字符
mysql> SELECT &#39;David!&#39; LIKE &#39;David\_&#39;;
-> 0
mysql> SELECT &#39;David_&#39; LIKE &#39;David\_&#39;;
-> 1

要指定一个不同的转义字符,可使用ESCAPE语句:

mysql> SELECT &#39;David_&#39; LIKE &#39;David|_&#39; ESCAPE &#39;|&#39;;
-> 1

转义序列可以为空,也可以是一个字符的长度。 从 MySQL 5.1.2开始, 如若 NO_BACKSLASH_ESCAPES SQL模式被激活, 则该序列不能为空。

以下两个语句举例说明了字符串比较不区分大小写,除非其中一个操作数为二进制字符串:

mysql> SELECT &#39;abc&#39; LIKE &#39;ABC&#39;;
-> 1
mysql> SELECT &#39;abc&#39; LIKE BINARY &#39;ABC&#39;;
-> 0

在MySQL中, LIKE 允许出现在数字表达式中。 (这是标准SQL LIKE 的延伸)。

mysql> SELECT 10 LIKE &#39;1%&#39;;
-> 1

注释: 由于 MySQL在字符串中使用 C转义语法(例如, 用‘\n’代表一个换行字符),在LIKE字符串中,必须将用到的‘\’双写。例如, 若要查找 ‘\n’, 必须将其写成 ‘\\n’。而若要查找 ‘\’, 则必须将其写成 it as ‘\\\\’;原因是反斜线符号会被语法分析程序剥离一次,在进行模式匹配时,又会被剥离一次,最后会剩下一个反斜线符号接受匹配。

  • expr NOT LIKE pat [ESCAPE 'escape-char']

这相当于 NOT (expr LIKE pat [ESCAPE 'escape-char'])。

  • expr NOT REGEXP pat expr NOT RLIKE pat

这相当于NOT (expr REGEXP pat)。

  • expr REGEXP pat expr RLIKE pat

执行字符串表达式 expr 和模式pat 的模式匹配。该模式可以被延伸为正规表达式。若expr 匹配 pat,则返回 1; 否则返回0。若 expr 或 pat 任意一个为 NULL, 则结果为 NULL。RLIKE 是REGEXP的同义词, 作用是为mSQL 提供兼容性。

模式不需要为文字字符串。例如,可以被指定为一个字符串表达式或表列。

注释:由于在字符串中, MySQL使用 C 转义语法 (例如, 用‘\n’来代表换行字符 ),在REGEXP字符串中必须将用到的‘\’ 双写。

REGEXP 不区分大小写, 除非将其同二进制字符串同时使用。

mysql> SELECT &#39;Monty!&#39; REGEXP &#39;m%y%%&#39;;
-> 0
mysql> SELECT &#39;Monty!&#39; REGEXP &#39;.*&#39;;
-> 1
mysql> SELECT &#39;new*\n*line&#39; REGEXP &#39;new\\*.\\*line&#39;;
-> 1
mysql> SELECT &#39;a&#39; REGEXP &#39;A&#39;, &#39;a&#39; REGEXP BINARY &#39;A&#39;;
-> 1  0
mysql> SELECT &#39;a&#39; REGEXP &#39;^[a-d]&#39;;
-> 1

在确定字符类型时,REGEXP 和 RLIKE 使用当前字符集 (默认为cp1252 Latin1 )。 警告:这些操作符不支持多字节字元。

  • STRCMP(expr1,expr2)

若所有的字符串均相同,则返回STRCMP(),若根据当前分类次序,第一个参数小于第二个,则返回  -1,其它情况返回 1。

mysql> SELECT STRCMP(&#39;text&#39;, &#39;text2&#39;);
-> -1
mysql> SELECT STRCMP(&#39;text2&#39;, &#39;text&#39;);
-> 1
mysql> SELECT STRCMP(&#39;text&#39;, &#39;text&#39;);
-> 0

在执行比较时,STRCMP() 使用当前字符集。这使得默认的比较区分大小写,当操作数中的一个或两个都是二进制字符串时除外。

 以上就是MySQL基础教程7 —— 函数之字符串函数的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn