区切り文字なしの文字列抽出質問の要件 データベース内のフィールド値: 実装効果: 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. 例 (I) 2番目の文字から始まる文字列「P1111」を取得します。 SUBSTRING('P1111',2) (II) 最後から2番目の文字から始まる文字列「P1111」を取得します。 SUBSTRING('P1111',-2) 2. 左から文字列を抽出します: LEFT(str,len)1. パラメータの説明
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 を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
>>: Vue コンポーネントの構成構造とコンポーネント登録の詳細
Jenkins をインストールした後、プラグインの初期ダウンロードが常に失敗し、インストールが失敗し...
目次MySQL Load Dataの多様な用途1. LOAD の基本的な背景2. 基本パラメータをロ...
HTTP ステータス コードは、Web サーバーの HTTP 応答ステータスを示すために使用される ...
この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...
目次1. インデックス署名とは何ですか? 2. インデックス署名構文3. インデックス署名に関する注...
目次シナリオ分析発達要約するシナリオ分析システムでは、1 つのモジュールに 3 つのサブモジュールが...
フロントエンドの開発過程で、チェックボックスが必要な状況が発生しました。ユーザー操作の利便性を考慮し...
1. HttpとHttpsの違いHTTP: インターネットで最も広く使用されているネットワーク プロ...
インターネット上で多くの関連チュートリアルを見てきましたが、インストール プロセスにはまだいくつかの...
1. 永久的な変更、すべてのユーザーに有効# vi /etc/プロファイル//キーボードの[Shi...
目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...
CSS スクロールバースタイル変更コード .scroll::-webkit-scrollbar { ...
目次1. 複数の .catch 2. 複数の .catch 3. .then と .catch の連...
1.前面に書きます:軽量仮想化テクノロジーとして、Docker には継続的インテグレーション、バージ...
通常、清明節、国哀悼日、大地震の日、影響力のある偉人の死去または命日には、ウェブマスターとして、故人...