区切り文字なしの文字列抽出質問の要件 データベース内のフィールド値: 実装効果: 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. パラメータの説明
2. 例 (1)区切り文字として2番目のカンマ「,」より前の文字をすべて取得します。 SUBSTRING_INDEX('7654,7698,7782,7788',',',2) (2)最後から2番目のカンマ区切り文字「,」以降のすべての文字を取得します。 SUBSTRING_INDEX('7654,7698,7782,7788',',',-2) 2. 置換関数: replace(str, from_str, to_str)1. パラメータの説明
2. 例 (1)区切り文字「,」カンマを「」スペースに置き換えます。 REPLACE('7654,7698,7782,7788',',','') 3. 文字列の長さを取得する: LENGTH( str )1. パラメータの説明
2. 例 (1)文字列「7654,7698,7782,7788」の長さを取得する 長さ('7654,7698,7782,7788') SQL解析を実装 選択 SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num から mysql.ヘルプトピック どこ help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1 ここでは、MySQL ライブラリの help_topic テーブルの help_topic_id を変数として使用していますが、これは help_topic_id が自動インクリメントされるためです。もちろん、他のテーブルの自動インクリメント フィールドも補助として使用できます。 help_topic テーブル: 実装手順: ステップ 1: まず、最終的に分割する必要がある文字列の数を取得し、help_topic_id を使用して n 番目の文字列のトラバースをシミュレートします。 関係するコード スニペット: help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1 ステップ 2: SUBSTRING_INDEX (str, delim, count) 関数を使用して、コンマ "," に基づいて文字列を分割し、結果を num フィールドに割り当てます。 関係するコード スニペット: SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num 最初のステップ: 区切り文字としてカンマ「,」を使用し、help_topic_id の値に従って n+1 番目の区切り文字の前のすべての文字列をインターセプトします。 (ここで n+1 なのは、help_topic_id が 0 から始まり、ここでは最初の区切り文字から取得する必要があるためです。) SUBSTRING_INDEX('7654,7698,7782,7788',',',ヘルプトピックID+1) 例えば: help_topic_id = 0 の場合、取得される文字列 = 7654 help_topic_id = 1 の場合、取得される文字列 = 7654,7698 …(等々) ステップ2: 区切り文字としてカンマ「,」を使用し、最後の区切り文字の後にあるすべての文字列を抽出します。 SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) 例えば: 最初のステップによると、help_topic_id = 0の場合、取得された文字列 = 7654、この時点で2番目のステップで傍受された文字列 = 7654 最初のステップによると、help_topic_id = 1の場合、取得された文字列 = 7654,7698、この時点で2番目のステップで傍受された文字列 = 7698 …(等々) 最終的に以下の効果を達成することに成功しました〜 注: 区切り文字なしの文字列分割については、MySQL - 文字列分割 (区切り文字なしの文字列インターセプト) を参照してください。 補足: MySQL フィールド区切り文字 split_MySQL の SPLIT に似た関数で文字列を分割します 以下の関数は、文字列を配列のように処理する機能を実装します。 1. 一時テーブルを配列として使用する関数 f_split(@c varchar(2000),@split varchar(2)) を作成します。 @t table(col varchar(20)) を返します。 として 始める while(charindex(@split,@c)<>0) 始める @t(col) 値を挿入します (substring(@c,1,charindex(@split,@c)-1)) @c = stuff(@c,@c),'') を設定します。 終わり @t(col) 値を挿入 (@c) 戻る 終わり 行く dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',') から * を選択 関数 f_split を削除する コル -------------------- dfkd dfdkdf dfdkf 翻訳 (影響を受ける行数は4) 2. 指定された記号で文字列を分割する分割後の要素の数を返します。この方法は非常に簡単です。文字列にセパレーターがいくつあるかを確認し、1 つ追加するだけで、必要な結果が得られます。 CREATE関数Get_StrArrayLength ( @str varchar(1024),--分割する文字列 @split varchar(10) --区切り文字) 整数を返す として 始める @location int を宣言する @start int を宣言する @length int を宣言する @str=ltrim(rtrim(@str)) を設定します。 @location=charindex(@split,@str) を設定します。 @長さを1に設定 @location<>0 の場合 始める @start=@location+1 を設定します @location=charindex(@split,@str,@start) を設定します。 @length=@length+1 を設定します 終わり @長さを返す 終わり 呼び出し例: dbo.Get_StrArrayLength('78,2,3',') を選択します。
3. 指定された記号で文字列を分割する分割後の指定されたインデックスの要素を返します。配列として便利です。 CREATE関数Get_StrArrayStrOfIndex ( @str varchar(1024),--分割する文字列 @split varchar(10),--区切り文字 @index int --取得する最初の要素) varchar(1024)を返します として 始める @location int を宣言する @start int を宣言する @next int を宣言する @seed int を宣言する @str=ltrim(rtrim(@str)) を設定します。 @start=1 を設定 @next=1 を設定 @seed=len(@split) を設定します @location=charindex(@split,@str) を設定します。 @location<>0 かつ @index>@next の場合 始める @start=@location+@seed を設定します @location=charindex(@split,@start) を設定します。 @next=@next+1 と設定 終わり @location =0 の場合、@location =len(@str)+1 を選択します。 --ここでは 2 つの状況があります: 1. 文字列に区切り文字がありません。2. 文字列に区切り文字があります。while ループから抜け出すと、@location は 0 になります。これは、デフォルトで文字列の後に区切り文字があることを意味します。 部分文字列(@str,@start,@location-@start)を返す 終わり 呼び出し例: dbo.Get_StrArrayStrOfIndex('8,9,4',2) を選択します。
4. 上記の2つの関数を組み合わせて、文字列内の要素を配列のように走査します。@str varchar(50) を宣言する @str='1,3,4,5' を設定します @next int を宣言する @next=1 を設定 @next<=dbo.Get_StrArrayLength(@str,') の場合 始める dbo.Get_StrArrayStrOfIndex(@str,@next) を印刷します。 @next=@next+1 と設定 終わり 通話結果:
上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
<<: 小さな三角形の実装コードを含む CSS ナビゲーション バー メニュー
最近はMySQLのパフォーマンス最適化についても研究しているので、今日の投稿は勉強ノートとしても使え...
最新の Windows 10 アップデートをインストールした後、システム UI の詳細な効果が顕著に...
目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...
今日は、MySQL をインストールしたかったので、公式 Web サイトにアクセスして、MySQL の...
目次1. 糖衣構文とは何ですか? 2. VUE の構文糖とは何ですか? 1. 最も一般的な構文シュガ...
Linux でファイルを編集した後、保存して終了するにはどうすればよいですか?保存して終了するコマン...
かなりの数のウェブサイトがデジタルページング効果を使用しています。たとえば、このサイトのページングも...
必要なファイルをインストールする Yum インストール openssl-* -yデータベースインデッ...
1. リストシンボルを設定するlist-style-type: attribute; //リストの...
CSS デフォルトスタイルをクリア通常の明確なデフォルト スタイル: *{ マージン:0; パディン...
目次1. html2Canvasをインストールする2. 必要なVueコンポーネントを導入する3. ス...
1. Howdyをインストール: howdyプロジェクトアドレス sudo add-apt-repo...
robots.txt の基本的な紹介Robots.txt はプレーンテキスト ファイルであり、Web...
JavaScript 入門JavaScript は軽量なインタープリタ型の Web 開発言語です。言...
目次序文ブラウザJS非同期実行の原理ブラウザのイベントループ実行スタックとタスクキューマクロタスクと...