ループ・バイ・反復処理のために達成するためのMySQL

MySQLは横断するループごとに個別に達成
背景を
予熱
コード
効果
補足
背景
原因友人がこのの裏で、その後、「州」という言葉を削除するには、フィールドの後ろに「広東省」、「広東省」が含まれていますどのようにSQLのネイティブ実装を使用するように頼まれますセグメント認識

予熱
SQL:のようなデータ定義言語(DDL)を含む構造化照会言語、:等をALTER、DROPの作成、データ操作言語(DML)、例えば:INSERT、UPDATE、DELETEなど、データ照会言語(DQL)、例えば:SELECT声明;のようなデータ制御言語(DCL)、:GRANT、REVOKE、COMMIT、ROLLBACKが好き。
T-SQL:のTransact-SQLは、SQL言語の拡張版であり、文法および他のプロセスコントロールしながら、場合プログラム言語に参加し、そして機能関数を使用することができます。

コードの
区切り文字//#は//キャンセルされたSQLのエンドマークとして定義され、私たちが立って何の
手続きテストの名前がある#場合は削除、テストが存在する場合、ドロップ手続き
(関数の使用を作成する作成手順のテスト()#を作成しますキーワード関数関数名())
を開始
宣言しold_pro VARCHAR(30);#は、変数が宣言
temp_id int型を宣言し、
フラグint型のデフォルトの0を宣言します。

これは、SQLクエリの結果を記録するために、カーソルの定義焦点である(ここではSQLの知識をあいまいクエリがあり、補足を参照してください)

declare s_list cursor for select id, province from temp_table where like "%省"; 
# 为下面while循环建立一个退出标志,当游标遍历完后将flag的值设置为1
declare continue handler for not found set flag=1;
open s_list;  # 打开游标
# 将游标中的值赋给定义好的变量,实现for循环的要点
    fetch s_list into temp_id, old_pro;
    while flag <> 1 do
        # sql提供了字符串的切分,有left、right、substring、substring_index
        # 在T-SQL中,局部变量必须以@作为前缀,声明方式set,select还有点差别
        set @temp_s = substring_index(old_pro, "省", 1);
        # 根据id的唯一性,利用当前查询到的记录中的字段值来实现更新
        update temp_table set province=@temp_s where id=temp_id;
        # 游标往后移(此处的游标是不是让你想起了C里面的指针)
        fetch s_list into temp_id, old_pro;
    end while;
    #select * from temp_table;
close s_list;  # 关闭游标

終了
//
DELIMITER;#は、再定義、SQLの終わりをマークするために、国家の廃止は//意味
コールテスト()を;#コールを

エフェクト
処理VS前処理後に
ループ・バイ・反復処理のために達成するためのMySQL
添加
SQLは、4つのマッチング・モード有する
、ゼロ以上の文字:1、%
2、_:任意の単一文字を表し;
3、[]:(括弧内にリストされた任意の文字を表します。 )同様の正規;
4、[^])を反転(同様の正規;
注:ワイルドカード文字は「[]」の特殊文字を囲むために使用して一致する場合(エスケープに対応)

おすすめ

転載: blog.51cto.com/14538264/2438829
おすすめ