ホームページ データベース mysql チュートリアル MySql官方手册学习笔记2 MySql的模糊查询和正则表达式_MySQL

MySql官方手册学习笔记2 MySql的模糊查询和正则表达式_MySQL

Jun 01, 2016 pm 01:23 PM
表現

正则表达式

bitsCN.com

SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。

要想找出以“b”开头的名字:

 

mysql> <strong>SELECT * FROM pet WHERE name LIKE 'b%';</strong>
ログイン後にコピー
+--------+--------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name   | owner  | species | sex  | birth      | death      |
ログイン後にコピー
ログイン後にコピー
+--------+--------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
ログイン後にコピー
ログイン後にコピー
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
ログイン後にコピー
ログイン後にコピー
+--------+--------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

要想找出以“fy”结尾的名字:

 

mysql> <strong>SELECT * FROM pet WHERE name LIKE '%fy';</strong>
ログイン後にコピー
+--------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name   | owner  | species | sex  | birth      | death |
ログイン後にコピー
ログイン後にコピー
+--------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
ログイン後にコピー
ログイン後にコピー
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
ログイン後にコピー
ログイン後にコピー
+--------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

要想找出包含“w”的名字:

 

mysql> <strong>SELECT * FROM pet WHERE name LIKE '%w%';</strong>
ログイン後にコピー
+----------+-------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name     | owner | species | sex  | birth      | death      |
ログイン後にコピー
ログイン後にコピー
+----------+-------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
ログイン後にコピー
ログイン後にコピー
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
ログイン後にコピー
ログイン後にコピー
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
ログイン後にコピー
ログイン後にコピー
+----------+-------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

要想找出正好包含5个字符的名字,使用“_”模式字符:

 

mysql> <strong>SELECT * FROM pet WHERE name LIKE '_____';</strong>
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name  | owner  | species | sex  | birth      | death |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。

扩展正则表达式的一些字符是:

         ‘.'匹配任何单个的字符。

         字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”“b”“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。

         “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。

  • 如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
  • 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”在模式的结尾用“$”

为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:

为了找出以“b”开头的名字,使用“^”匹配名字的开始:

 

mysql> <strong>SELECT * FROM pet WHERE name REGEXP '^b';</strong>
ログイン後にコピー
+--------+--------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name   | owner  | species | sex  | birth      | death      |
ログイン後にコピー
ログイン後にコピー
+--------+--------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
ログイン後にコピー
ログイン後にコピー
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
ログイン後にコピー
ログイン後にコピー
+--------+--------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串。该查询只匹配名称首字母的小写‘b'。

 

mysql> <strong>SELECT * FROM pet WHERE name REGEXP BINARY '^b';</strong>
ログイン後にコピー
<strong> </strong>
ログイン後にコピー

为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:

 

mysql> <strong>SELECT * FROM pet WHERE name REGEXP 'fy$';</strong>
ログイン後にコピー
+--------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name   | owner  | species | sex  | birth      | death |
ログイン後にコピー
ログイン後にコピー
+--------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
ログイン後にコピー
ログイン後にコピー
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
ログイン後にコピー
ログイン後にコピー
+--------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

为了找出包含一个“w”的名字,使用以下查询:

 

mysql> <strong>SELECT * FROM pet WHERE name REGEXP 'w';</strong>
ログイン後にコピー
+----------+-------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name     | owner | species | sex  | birth      | death      |
ログイン後にコピー
ログイン後にコピー
+----------+-------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
ログイン後にコピー
ログイン後にコピー
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
ログイン後にコピー
ログイン後にコピー
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
ログイン後にコピー
ログイン後にコピー
+----------+-------+---------+------+------------+------------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

既然如果一个正则表达式出现在值的任何地方,其模式匹配了,就不必在先前的查询中在模式的两侧放置一个通配符以使得它匹配整个值,就像你使用了一个SQL模式那样。

为了找出包含正好5个字符的名字,使用“^”“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:

 

mysql> <strong>SELECT * FROM pet WHERE name REGEXP '^.....$';</strong>
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name  | owner  | species | sex  | birth      | death |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

你也可以使用“{n}”“重复n次”操作符重写前面的查询:

 

mysql> <strong>SELECT * FROM pet WHERE name REGEXP '^.{5}$';</strong>
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| name  | owner  | species | sex  | birth      | death |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
+-------+--------+---------+------+------------+-------+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
bitsCN.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python 式の構文エラーを解決するにはどうすればよいですか? Python 式の構文エラーを解決するにはどうすればよいですか? Jun 24, 2023 pm 05:04 PM

Python は高レベルのプログラミング言語であり、学習と使用が簡単です。 Python プログラムを作成する必要があると、必然的に構文エラーに遭遇することになります。式の構文エラーはよくあるエラーです。この記事では、Python で式の構文エラーを解決する方法について説明します。式の構文エラーは Python で最も一般的なエラーの 1 つであり、通常は構文の間違った使用法や必要なコンポーネントの欠落によって発生します。 Python では、式は通常、数値、文字列、変数、演算子で構成されます。ごくありふれた

C および C++ では、式またはステートメントを区切るためにカンマが使用されます。 C および C++ では、式またはステートメントを区切るためにカンマが使用されます。 Sep 09, 2023 pm 05:33 PM

C または C++ では、カンマ「,」はさまざまな用途に使用されます。ここではそれらの使用方法を学びます。演算子としてのカンマ。カンマ演算子は、最初のオペランドを評価して結果を破棄し、次に 2 番目のオペランドを評価して値を返す二項演算子です。カンマ演算子は、C または C++ では優先順位が最も低くなります。例 #include<stdio.h>intmain(){ intx=(50,60); inty=(func1(),func2());} ここでは、x に 60 が代入されます。次のステートメントでは、 func1( が最初に実行されます

C言語の指数関数式入門 C言語の指数関数式入門 Feb 18, 2024 pm 01:11 PM

C 言語での指数関数式の書き方とコード例の紹介 指数関数とは? 指数関数は数学でよく使われる関数で、f(x)=a^x の形式で表現できます。 a は底、x は指数です。指数関数は主に、指数関数的な増加または指数関数的な減衰を説明するために使用されます。指数関数のコード例 C 言語では、数学ライブラリの pow() 関数を使用して指数関数を計算できます。

Javaのラムダ式 Javaのラムダ式 Jun 09, 2023 am 10:17 AM

Java のラムダ式 Java 8 のリリースにより、ラムダ式は Java 開発者の間で最も懸念され、議論されるトピックの 1 つになりました。ラムダ式を使用すると、Java プログラマーの退屈な記述方法が簡素化され、プログラムの可読性と保守性も向上します。この記事では、Java のラムダ式と、ラムダ式が Java コードでよりシンプルで直感的なプログラミング エクスペリエンスを提供する方法について詳しく説明します。

ラムダ式を使用してコレクションをループする ラムダ式を使用してコレクションをループする Feb 19, 2024 pm 07:32 PM

ラムダ式は、コレクションを反復処理するために便利に使用できる匿名関数です。この記事では、ラムダ式を使用してコレクションを反復処理する方法を紹介し、具体的なコード例を示します。 Python では、ラムダ式の構文形式は次のとおりです。 ラムダ パラメータ リスト: 式のパラメータ リストには、カンマで区切られた 1 つ以上のパラメータを含めることができます。式はラムダ関数の戻り値です。以下の簡単な例を見てみましょう。

Python ラムダ式の上級ガイド: 初心者から熟練者まで Python ラムダ式の上級ガイド: 初心者から熟練者まで Feb 24, 2024 pm 03:31 PM

ラムダ式の概要と基本構文 ラムダ式は、関数パラメータ リスト、コロン、関数本体で構成されます。関数パラメータのリストは通常​​の関数と同じで、関数本体はステートメントのセットではなく式です。 #例: 2 つの数値を受け取り、その合計を返す関数を返す sum=lambdax,y:x+y ラムダ式のアプリケーション シナリオ ラムダ式は、コールバック関数、フィルター関数、およびマッピング関数としての使用に非常に適しています。コールバック関数: コールバック関数は、別の関数内で呼び出される関数です。ラムダ式を使用すると、名前を宣言せずにコールバック関数を簡単に作成できます。フィルター機能: フィルター機能は、完全なフィルターを除去するために使用されます。

Java ラムダ式の実践: コードを使用して関数型プログラミングの謎を解く Java ラムダ式の実践: コードを使用して関数型プログラミングの謎を解く Feb 26, 2024 am 10:25 AM

ラムダ式は、名前が示すように、矢印記号 (->) を中心とした匿名関数です。コードのブロックを引数として他のメソッドに渡したり、後で使用するために変数に格納したりできます。ラムダ式の構文は簡潔で理解しやすく、データ フローの処理や並列コンピューティングに非常に適しています。 1. ラムダ式の基本構文 ラムダ式の基本構文は以下のとおりです。 (パラメータリスト)->{コードブロック} このうち、パラメータリストとコードブロックはオプションです。パラメータが 1 つだけの場合は、括弧を省略できます。コード ブロックが 1 行のみの場合は、中括弧を省略できます。たとえば、次のコード ブロックはラムダ式を使用して数値に 1 を加算します。

PHP8.0 の try ステートメント ブロックは式をサポートしています PHP8.0 の try ステートメント ブロックは式をサポートしています May 14, 2023 am 08:12 AM

コンピューター技術の急速な発展に伴い、プログラミング言語は常にアップグレードおよび改良されています。その中でも、PHP は一般的に使用される Web 開発言語として、常に革新され、新しいバージョンがリリースされています。最近、PHP8.0バージョンがリリースされ注目を集めています。中でも新バージョンでの例外処理機構の改善は大きな注目を集めている。この記事では、PHP8.0 の try ステートメント ブロックでの式サポートのトピックに焦点を当てます。 1. PHP8.0の例外処理機構の改善 以前のバージョンでは、P

See all articles