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でLinuxシェルコマンドを実行する方法

Docker でシェル コマンドを実行するには、コマンドの前に sh -c を追加する必要があります...

WeChatアプレットのオーディオコンポーネントがiOSで再生できない問題の解決策

解決策:クリック イベントをオーディオ コンポーネントにバインドし、再生メソッドと一時停止メソッドを...

mysql5.7.33 で誤って ibdata ファイルを削除した後にデータを回復する方法

目次1. シナリオの説明: 2. 事例のデモンストレーション: 2.1. MySQLの障害発生前にデ...

DockerでMongoDBコンテナをデプロイする方法

目次Dockerとは展開する1. イメージをプルする2. 画像を表示する3. コンテナを実行する4....

mysql8.0.12 でルートパスワードをリセットする方法

データベースをインストールした後、誤ってインストール ウィンドウを閉じたり、長期間 root ユーザ...

nginx ウェブサイト サービスのアンチホットリンクを設定する方法 (推奨)

1. ホットリンクの原則1.1 Webページの準備Web ソース ホスト (192.168.153...

HTML の基本概要推奨事項 (段落)

HTML段落段落は <p> タグによって定義されます。例<p>これは段落で...

JSはストップウォッチタイマーを実装します

この記事の例では、ストップウォッチタイマーを実装するためのJSの具体的なコードを参考までに共有してい...

Tomcat は親の委任メカニズムを破壊して Web アプリケーションの分離を実現します。

目次Tomcat クラスローダー階層WebAppクラスローダー共有クラスローダーカタリナクラスローダ...

MySQL スローログ実践のまとめ

遅いログクエリ機能スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステート...

中国の専門ではない:文化の違いの中でのウェブ開発

Web デザインと開発は大変な作業なので、少数の人だけを対象に設計しないでください。これは外国人が...

HTML に CSS を導入するいくつかの方法の紹介

目次1. HTMLタグ要素にCSSスタイルを直接埋め込む2. HTMLのheadセクションにおけるス...

JS の効率的なマジック演算子の概要

JavaScript は現在、毎年新しいバージョンがリリースされており、より便利で効率的な新しい演算...

Vueドロップダウンリストの2つの実装方法の比較

Vueドロップダウンリストの2つの実装最初の方法はv-forを使用する <el-select ...

dns-prefetch とは何ですか? フロントエンドの最適化: DNS の事前解決によりページ速度が向上します

目次背景1. dns-prefetch とは何ですか? 2. dns-prefetch を設定するに...