Maison > base de données > tutoriel mysql > Tutoriel de base MySQL 7 — Fonction de chaîne de fonction

Tutoriel de base MySQL 7 — Fonction de chaîne de fonction

黄舟
Libérer: 2017-02-24 11:15:07
original
923 Les gens l'ont consulté

Si la longueur du résultat est supérieure à la valeur maximale de la variable système max_allowed_packet, la valeur de retour de la fonction de valeur de chaîne est NULL.

Pour les fonctions qui opèrent sur des positions de chaîne, la première position est numérotée 1.

  • ASCII(str)

La valeur de retour est le caractère le plus à gauche de la chaîne str valeur. Si str est une chaîne vide, la valeur de retour est 0. Si str est NULL, la valeur de retour est NULL. ASCII() est utilisé pour les caractères avec des valeurs numériques comprises entre 0 et 255.

mysql> SELECT ASCII('2');
-> 50
mysql> SELECT ASCII(2);
-> 50
mysql> SELECT ASCII('dx');
-> 100
Copier après la connexion

Voir la fonction ORD().

  • BIN(N)

renvoie une chaîne avec la valeur binaire de N Représente , où N est un nombre longlong (BIGINT). Cela équivaut à CONV(N,10,2). Si N est NULL, la valeur de retour est NULL.

mysql> SELECT BIN(12);
-> '1100'
Copier après la connexion
  • BIT_LENGTH(str)

La valeur de retour est une chaîne binaire str Longueur.

mysql> SELECT BIT_LENGTH('text');
-> 32
Copier après la connexion
  • CHAR(N,... [USING charset])

CHAR() comprend chaque paramètre N comme un entier, et sa valeur de retour est une chaîne contenant les caractères donnés par les valeurs de code de ces entiers. Les valeurs NULL sont omises.

mysql> SELECT CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql> SELECT CHAR(77,77.3,'77.3');
-> 'MMM'
Copier après la connexion

Les paramètres CHAR() supérieurs à 255 sont convertis en caractères multi-résultats. Par exemple, CHAR(256) est équivalent à CHAR(1,0), et CHAR(256*256) est équivalent à 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             |
+------------------+--------------------+
Copier après la connexion

La valeur de retour de CHAR () est une chaîne binaire. Vous pouvez éventuellement utiliser l'instruction USING pour générer une chaîne dans le jeu de caractères donné :

mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));

mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));+---------------------+--------------------------------+
| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |
+---------------------+--------------------------------+
| binary              | utf8                           |
+---------------------+--------------------------------+
Copier après la connexion

Un avertissement sera émis si USING a été généré et que la chaîne résultante n'est pas conforme au jeu de caractères donné. De même, si le mode SQL strict est activé, le résultat de CHAR() sera NULL.

  • CHAR_LENGTH(str)

La valeur de retour est la longueur de la chaîne str , longueur L'unité est en caractères. Un caractère multi-octets compte comme un seul caractère. Pour un contenant cinq jeux de caractères à deux octets, la valeur de retour de LENGTH() est 10 et la valeur de retour de CHAR_LENGTH() est 5.

  • CHARACTER_LENGTH(str)

CHARACTER_LENGTH() est un synonyme de CHAR_LENGTH().

  • COMPRESS(string_to_compress)

Compresse une chaîne. Cette fonction nécessite que MySQL ait été compressé à l'aide d'une bibliothèque de compression telle que zlib. Sinon, la valeur de retour est toujours NULL. UNCOMPRESS() peut décompresser la chaîne compressée.

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
Copier après la connexion

Le contenu de la chaîne compressée est stocké comme suit :

    • Les chaînes vides sont stockées sous forme de chaînes vides.

    • Chaîne non vide La longueur de quatre octets de la chaîne non compressée est stockée (l'octet faible en premier), suivie de la chaîne compressée. Si la chaîne se termine par un espace, un "." sera ajouté à la fin pour empêcher que l'espace de fin soit automatiquement supprimé lorsque la valeur du résultat est stockée dans une colonne de champ de type CHAR ou VARCHAR. (Il n'est pas recommandé d'utiliser CHAR ou VARCHAR pour stocker des chaînes compressées. Il est préférable d'utiliser une colonne BLOB à la place).

  • CONCAT(str1,str2,...)

Retour Le résultat est la chaîne produite par les paramètres de connexion. Si un paramètre est NULL, la valeur de retour est NULL. Il peut y avoir un ou plusieurs paramètres. Si tous les arguments sont des chaînes non binaires, le résultat est une chaîne non binaire. Si l'argument contient une chaîne binaire, le résultat est une chaîne binaire. Un argument numérique est converti dans son format de chaîne binaire équivalent ; pour éviter cela, utilisez un transtypage de type explicite, par exemple : 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'
Copier après la connexion
  • CONCAT_WS(separator ,str1,str2,...)

CONCAT_WS() représente CONCAT avec séparateur, qui est la forme spéciale CONCAT( ). Le premier paramètre est le séparateur des autres paramètres. La position du délimiteur est placée entre les deux chaînes à concaténer. Le délimiteur peut être une chaîne ou d'autres paramètres. Si le délimiteur est NULL, le résultat est NULL. La fonction ignore les valeurs NULL après tout argument délimiteur.

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)。
Copier après la connexion
  • 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'
Copier après la connexion
  • 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'
Copier après la connexion
  • 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'
Copier après la connexion
  • FIELD(str,str1,str2,str3,...)

返回值为str1, str2, str3,……列表中的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
Copier après la connexion
  • FIND_IN_SET(str,strlist)

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

mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
Copier après la connexion
  • 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
Copier après la connexion
  • 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'
Copier après la connexion

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

  • INSTR(str,substr)

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

mysql> SELECT INSTR('foobarbar', 'bar');
-> 4
mysql> SELECT INSTR('xbar', 'foobar');
-> 0
Copier après la connexion

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

  • LCASE(str)

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

  • LEFT(str,len)

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

mysql> SELECT LEFT('foobarbar', 5);
-> 'fooba'
Copier après la connexion
  • LENGTH(str)

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

mysql> SELECT LENGTH('text');
-> 4
Copier après la connexion
  • LOAD_FILE(file_name)

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

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

mysql> UPDATE tbl_name
SET blob_column=LOAD_FILE('/tmp/picture')
WHERE id=1;
Copier après la connexion
  • 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
Copier après la connexion

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

  • LOWER(str)

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

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

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

mysql> SELECT LPAD('hi',4,'??');
-> '??hi'
mysql> SELECT LPAD('hi',1,'??');
-> 'h'
Copier après la connexion
  • LTRIM(str)

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

mysql> SELECT LTRIM('  barbar');
-> 'barbar'
Copier après la connexion

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

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

返回一个设定值 (一个包含被‘,’号分开的字字符串的字符串) ,由在bits 组中具有相应的比特的字符串组成。str1 对应比特 0,str2 对应比特1,以此类推。str1, str2, ...中的 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');
-> ''
Copier après la connexion
  • 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'
Copier après la connexion
  • OCTET_LENGTH(str)

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

  • ORD(str)

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

   (1st byte code)
+ (2nd byte code × 256)
+ (3rd byte code × 2562) ...
Copier après la connexion

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

mysql> SELECT ORD('2');
-> 50
Copier après la connexion
  • 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
Copier après la connexion
  • REPEAT(str,count)

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

mysql> SELECT REPEAT(&#39;MySQL&#39;, 3);
-> &#39;MySQLMySQLMySQL&#39;
Copier après la connexion
  • 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;
Copier après la connexion

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

  • REVERSE(str)

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

mysql> SELECT REVERSE(&#39;abc&#39;);
-> &#39;cba&#39;
Copier après la connexion

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

  • RIGHT(str,len)

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

mysql> SELECT RIGHT(&#39;foobarbar&#39;, 4);
-> &#39;rbar&#39;
Copier après la connexion

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

  • 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;
Copier après la connexion

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

  • RTRIM(str)

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

mysql> SELECT RTRIM(&#39;barbar   &#39;);
-> &#39;barbar&#39;
Copier après la connexion

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

  • 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;
Copier après la connexion

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

  • expr1 SOUNDS LIKE expr2

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

  • SPACE(N)

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

mysql> SELECT SPACE(6);
-> &#39;      &#39;
Copier après la connexion
  • 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;
Copier après la connexion

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

注意,如果对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;
Copier après la connexion

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

  • 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;
Copier après la connexion

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

  • 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
Copier après la connexion
  • UNCOMPRESSED_LENGTH(compressed_string)

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

mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT(&#39;a&#39;,30)));
-> 30
Copier après la connexion
  • 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;
Copier après la connexion
  • UPPER(str)

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

mysql> SELECT UPPER(&#39;Hej&#39;);
-> &#39;HEJ&#39;
Copier après la connexion

该函数支持多字节字元。

1. 字符串比较函数

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

mysql> SELECT 1+&#39;1&#39;;
-> 2
mysql> SELECT CONCAT(2,&#39; test&#39;);
-> &#39;2 test&#39;
Copier après la connexion

若想要将数字明确地转化为字符串,可使用 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;
Copier après la connexion

CAST() 比较可取。.

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

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

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

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

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

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

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

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

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

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

mysql> SELECT &#39;David_&#39; LIKE &#39;David|_&#39; ESCAPE &#39;|&#39;;
-> 1
Copier après la connexion

转义序列可以为空,也可以是一个字符的长度。 从 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
Copier après la connexion

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

mysql> SELECT 10 LIKE &#39;1%&#39;;
-> 1
Copier après la connexion

注释: 由于 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。若 exprpat 任意一个为 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
Copier après la connexion

在确定字符类型时,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
Copier après la connexion

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

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


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal