MySQL 文字列分割の例 (区切り文字なしの文字列抽出)

MySQL 文字列分割の例 (区切り文字なしの文字列抽出)

区切り文字なしの文字列抽出

質問の要件

データベース内のフィールド値:

実装効果: 1行のデータを複数行に変換する必要がある

実装されたSQL

SELECT LEFT(SUBSTRING('P1111',help_topic_id+1),1) AS num FROM mysql.help_topic WHERE help_topic_id < LENGTH('P1111');

関連する知識ポイント

1. 文字列インターセプション: SUBSTRING(str,pos)

1. パラメータの説明

パラメータ名説明する
str傍受された文字列
POSどの位置から抽出を開始しますか? pos が正の数の場合は、文字列の先頭から posth の位置から開始して最後まで続けることを意味します。pos が負の数の場合は、文字列の末尾から posth の位置から開始して最後まで続けることを意味します。

2. 例

(I) 2番目の文字から始まる文字列「P1111」を取得します。

SUBSTRING('P1111',2)

(II) 最後から2番目の文字から始まる文字列「P1111」を取得します。

SUBSTRING('P1111',-2)

2. 左から文字列を抽出します: LEFT(str,len)

1. パラメータの説明

パラメータ名説明する
str傍受された文字列
レン左端から lenth の位置までの文字列の値を表す正の整数。

2. 例

(I) 文字列「P1111」の左端の3文字を取得します。

左('P1111',3)

ヒント:

文字列を左からインターセプトする関数 LEFT(str,len) があり、もちろん文字列を右からインターセプトする関数 RIGHT(str,len) もあります。 2 つの関数の原理は同じで、違いは文字列が左からインターセプトされるか右からインターセプトされるかです。

SQL 解析

SELECT LEFT(SUBSTRING('P1111',help_topic_id+1),1) AS num FROM mysql.help_topic WHERE help_topic_id < LENGTH('P1111');

ここで、MySQL ライブラリの help_topic テーブルの help_topic_id も変数として使用します。これは、help_topic_id が自動インクリメントされるためです。もちろん、他のテーブルの自動インクリメント フィールドを補助として使用することもできます。

MySQL - 文字列分割(I)を参照してください。

実装手順

ステップ1:

文字列 'P1111' の長さを取得し、help_topic_id を使用して文字列 'P1111' のトラバーサルを動的にシミュレートします。

ヘルプトピックID < 長さ('P1111')

ステップ2:

SUBSTRING(str,pos) 関数と help_topic_id を使用して、文字列 'P1111' を抽出します。 (ここで「help_topic_id+1」となっているのは、help_topic_id が 0 から始まり、SUBSTRING 関数が最初の位置から文字列をインターセプトする必要があるためです)

SUBSTRING('P1111',ヘルプトピックID+1)

例えば:

help_topic_id = 0 の場合、取得される文字列 = P1111

help_topic_id = 1 の場合、取得される文字列 = 1111

…(等々)

ステップ 3: ステップ 2 の実装に基づいて、LEFT(str,len) 関数を使用して、ステップ 2 の左から最初の文字を取得します。

LEFT(SUBSTRING('P1111',ヘルプトピックID+1),1)

例えば:

ステップ2によれば、help_topic_id = 0の場合、取得される文字列 = P1111、ステップ3で取得される文字列 = P

ステップ2によれば、help_topic_id = 1の場合、取得される文字列 = 1111、ステップ3で取得される文字列 = 1

…(等々)

最終的に、以下の効果が達成されました。

注: 区切り文字を含む文字列分割については、MySQL - 文字列分割 (区切り文字を含む文字列インターセプト) を参照してください。

補足: mysql は見つかった文字列を分割します_Mysql の文字列分割クエリ

余計なことは言わないで、コードだけ見てみましょう〜

区切り文字 $$
存在する場合は関数を削除します `tms1`.`GetClassName` $$
CREATE FUNCTION `GetClassName`(f_string VARCHAR(15000)) 戻り値 varchar(15000)
始める
/* , を含む文字列の最初の位置をチェックします。*/
THE_CNT INT(15) をデフォルト 1 として宣言します。
/* クラス番号 */
classId varchar(20) をデフォルトで '' と宣言します。
/* 返されるクラス名 */
結果をvarchar(15000)として宣言します。DEFAULTはnullです。
/* クラス名 */
className varchar(50) DEFAULT '' を宣言します。
/* を含む文字列の最初の位置 */
THE_CNT = LOCATE(',',f_string) を設定します。
/* 文字列の最初の位置に , が含まれているかどうかを確認します*/
(THE_CNT >= 0) の間
/* 、場所が存在しない場合*/
THE_CNT = 0の場合
/* クラス番号の設定*/
classId = f_string を設定します。
それ以外
/* 文字列からクラス番号を取得します */
classId を SUBSTRING_INDEX(SUBSTRING_INDEX(f_string, ',', 1), ',', -1) に設定します。
終了の場合;
/* クラス番号に基づいてクラス名を取得します */
(id = classId のクラスから名前を選択) を className に選択します。
/* 空の場合はクラス番号文字列を返します*/
結果がnullの場合
/* 番号に従ってクラス名が見つからない場合*/
classNameがnullの場合
/* クラス名を空に設定します */
クラス名を ' ' に設定します。
終了の場合;
/* 文字列にクラス名を追加します */
結果をclassNameに設定します。
それ以外
/* 番号に従ってクラス名が見つからない場合*/
classNameがnullの場合
/* クラス名を空に設定します */
クラス名を ' ' に設定します。
終了の場合;
/* 文字列にクラス名を追加します */
結果 = CONCAT(結果,',',クラス名) を設定します。
終了の場合;
/* 、場所が存在しない場合*/
THE_CNT = 0の場合
/* 結果セットを返す */
結果を返します。
終了の場合;
/* 受信した文字列を傍受する */
f_string = right(f_string,length(f_string) - THE_CNT) を設定します。
/* を含む文字列の最初の位置 */
THE_CNT = LOCATE(',',f_string) を設定します。
/* トラバーサル終了 */
終了しながら;
/* 結果セットを返す */
結果を返します。
終了 $$
区切り文字 ;

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL 文字列分割操作 (区切り文字を含む文字列のインターセプション)
  • 分割機能を実現するためのMySql文字列分割(フィールド分割と列転送)

<<:  CSS3 天子グリッドリストのスタイルの書き方

>>:  Vue コンポーネントの構成構造とコンポーネント登録の詳細

推薦する

DockerでJenkinsをインストールし、初期プラグインのインストール失敗の問題を解決する

Jenkins をインストールした後、プラグインの初期ダウンロードが常に失敗し、インストールが失敗し...

MySQL データベース データのロード 複数の用途

目次MySQL Load Dataの多様な用途1. LOAD の基本的な背景2. 基本パラメータをロ...

一般的な HTTP ステータス コード 10 個の詳細な説明

HTTP ステータス コードは、Web サーバーの HTTP 応答ステータスを示すために使用される ...

Centos7.4 環境に lamp-php7.0 をインストールするチュートリアル

この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...

TypeScriptのインデックスシグネチャの理解に関する簡単な説明

目次1. インデックス署名とは何ですか? 2. インデックス署名構文3. インデックス署名に関する注...

同じページを動的にロードするための Vue ルーティングリスニングの例

目次シナリオ分析発達要約するシナリオ分析システムでは、1 つのモジュールに 3 つのサブモジュールが...

DIVマスクを使用して、マウスでチェックボックスを直接チェックすることが無効である問題を解決します

フロントエンドの開発過程で、チェックボックスが必要な状況が発生しました。ユーザー操作の利便性を考慮し...

Nginx で HTTPS 証明書を構成する詳細なプロセス

1. HttpとHttpsの違いHTTP: インターネットで最も広く使用されているネットワーク プロ...

MySQL 5.7.20 無料インストールバージョンの設定方法グラフィックチュートリアル

インターネット上で多くの関連チュートリアルを見てきましたが、インストール プロセスにはまだいくつかの...

Linux で環境変数 JAVA_HOME を変更/設定する方法について簡単に説明します。

1. 永久的な変更、すべてのユーザーに有効# vi /etc/プロファイル//キーボードの[Shi...

MySQL の複合インデックスはどのように機能しますか?

目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...

CSS スクロールバースタイル変更コード

CSS スクロールバースタイル変更コード .scroll::-webkit-scrollbar { ...

JS 9 Promise 面接の質問

目次1. 複数の .catch 2. 複数の .catch 3. .then と .catch の連...

DockerでVueプロジェクトをデプロイする方法を教えます

1.前面に書きます:軽量仮想化テクノロジーとして、Docker には継続的インテグレーション、バージ...

CSS スタイルを変更してグレーの Web ページ (色なし、明るい白黒のみ) を実現するいくつかの方法

通常、清明節、国哀悼日、大地震の日、影響力のある偉人の死去または命日には、ウェブマスターとして、故人...