Mysqlで最も一般的に使用される関数のトップ10

機能1:CONCAT

  • 使用シナリオ:クエリ時に複数のフィールドを文字列に連結します
  • select concat('id:',`id`,',name:',`name`) from `student`
  • 分析:接続する必要のあるフィールドはコンマで区切られ、カスタムスプライシングシンボルは一重引用符で囲まれ、コンマで区切られます。
  • 注:この関数は、列の値が空の場合、この列のスプライシングの結果がnullになることに注意する必要があります。この状況を回避するには、空の可能性がある列に関数2を追加する必要があります。

関数2:IFNULL          

  • 使用シナリオ:クエリを実行するときは、フィールドが空かどうかを判断します。空の場合は2番目のデフォルトパラメータを使用し、空でない場合はテーブルのデータを取得します。
  • SELECT IFNULL(`student_number`,'is null') FROM `sc_student`

     

  • 分析:2つのパラメーター、最初のパラメーターはフィールド名、2番目のパラメーターはデフォルト値です
  • 注:これはクエリ結果の判断です。データが存在しない場合、次のようなデフォルト値は使用されません(studentテーブルに合計10個のデータ):SELECT IFNULL(student_number、 'is null ')FROM `sc_student` WHERE id = 100、この結果はデフォルト値ではなくnullです' is null '

機能3:COALESCE        

  • 使用シナリオ:クエリを実行するときは、フィールドが空かどうかを判断し、フィールドが空の場合は2番目のパラメーターから空でない値を取得し、フィールドが空でない場合はテーブルのデータを取得します
  • SELECT COALESCE(`student_number`,NULL,NULL,'is default') FROM `student`

     

  • 分析:複数のパラメーター、最初のパラメーターはフィールド名、2番目のパラメーターはオプションです。フィールドが空の場合、値は2番目のパラメーターから空ではない値です。すべてが空の場合、nullを返します。
  • 注:いいえ

機能4:交換

  • 使用シナリオ:クエリ時にフィールド内の指定された文字を置き換えます
  • SELECT REPLACE(`name`,'陈小婷','小红') FROM `student`

  • 分析:3つのパラメーター、最初のパラメーターはフィールド名、2番目のパラメーターはフィールドで置き換えられる文字列、3番目のパラメーターは置き換えられた文字列です
  • 注:2番目のパラメーター値は3番目のパラメーター値に置き換えられます

関数5:FIND_IN_SET

  • 使用シナリオ:指定された文字がフィールドに存在するかどうかに関係なく、このタイプのフィールドには機能があります。つまり、「、」(コンマ)で区切られた複数の値があります。
  • SELECT `id` , `name` , `score` from `student` where find_in_set ('100' , `score` )

     

  • 分析:2つのパラメーター、最初のパラメーターはクエリ条件、2番目のパラメーターは一致する必要のあるフィールドです。3つのコースのスコアを格納するためのフィールドスコアが学生テーブルにあり、「、」で区切られているとします。 (comma区切り)、このステートメントは、スコアが100ポイントの少なくとも1人の学生のIDと名前を学生テーブルに照会するためのものです。
  • 注:2つのパラメーターの順序は、逆さまに書くのが簡単なことがよくあります。最も注意が必要なのは、逆さまに書くことであり、プログラムはエラーを報告しません。

機能6:ケース

  • 使用シナリオ:テーブルに状態フィールドがあり、値は0(無効)または1(有効)ですが、クエリ結果に対応する漢字を表示したいと思います。 
  • SELECT `id` , `nickname` , `state` ,(CASE `state` WHEN 0 THEN '禁用' WHEN 1 THEN '启用' ELSE '其他' END ) `state_new` FROM `student`

  • 解決策:学生テーブルのID、名前、およびステータスを照会します。ステータスが0の場合は無効になり、1の場合は有効になり、0と1でない場合は他のテーブルが表示されます。
  • 注:最後に終わりがあります。忘れないでください

関数7:GROUP_CONCAT    

  • 使用シナリオ:商品テーブル、商品ラベルテーブル、商品ラベル関連付けテーブルがある場合、各商品に対応する複数の商品ラベルIDを調べたい 
  • SELECT pi.id,GROUP_CONCAT( ptr.product_tag_id ) as tags FROM `product_info` pi LEFT JOIN `product_tag_rel` ptr ON pi.id = ptr.product_info_id GROUP BY pi.id

     

  • 分析:各製品と各製品の対応する製品タグIDを照会します(製品タグIDはコンマで区切られます)
  • 注:グループ化

関数8:FROM_UNIXTIME

  • 使用シナリオ:タイムスタンプから日付形式
  • SELECT `id` , FROM_UNIXTIME(`add_time`, '%Y-%m-%d %H:%i') FROM `student`

     

  • 解決策:学生テーブルのIDとフォーマットされた作成時刻(年-月-日時間:分)をクエリします
  • 注:フォーマット文字の場合

機能9:TIMESTAMPDIFF

  • シナリオの使用:時差を見つける
  • SELECT TIMESTAMPDIFF(SECOND , `create_time` , `update_time`)  FROM `student`
    
    SELECT TIMESTAMPDIFF(SECOND,'2018-07-01 09:00:00','2018-07-04 12:00:00') FROM `student`

  • 解決策:学生テーブルの作成時間と変更時間の2番目の差を照会します(2番目:秒/分:分/時間:時間/日:日/月:月/年:年)
  • 注:データ型がdatetimeの場合、create_time <update_time

 

機能10:MAX

  • 使用シナリオ:最大値を照会する
  • SELECT `id`, `subject_id` , MAX(score) FROM `student_score` GROUP BY `subject_id` HAVING MAX(score) > 90

  • 分析:学生の成績証明書で90ポイントを超える各科目の最高スコアをクエリし、各科目のグループ化GROUP BY `subject_id`を使用し90ポイントを超える条件フィルタリングするためにHAVING MAX(score)> 90を使用します
  • 注:グループ化、フィルタリング

おすすめ

転載: blog.csdn.net/weixin_43452467/article/details/113857305