文字列の結合-MYSQL

3035 ワード

SQLでは、2つ以上のフィールド間で計算が可能になります.文字列タイプのフィールドも例外ではありません.たとえば、レポートに従業員の情報を「工番+名前」で表示する必要がある場合は、工番と名前の2つの文字列タイプのフィールドをつなぎ合わせて計算する必要があります.さらに、レポートに各従業員の勤務番号の前に「Old」というテキストを追加する必要があります.この場合、文字列タイプのフィールド(文字列タイプの定数フィールドを含む)をつなぎ合わせる必要があります.異なるデータベースシステムでの文字列の結合には大きな違いがあるので、主流のデータベースでの文字列の結合の違いについて説明します.
Java、C#などのプログラミング言語では文字列は半角の二重引用符で囲まれていますが、一部のデータベースシステムではSQL構文では二重引用符に他の意味(列の別名など)があり、すべてのデータベースシステムでは一重引用符で囲まれた形式で定義された文字列がサポートされています.したがって、読者は一重引用符で囲まれた形式で定義された文字列を使用することをお勧めします.また、本書でもこのような方法を使用します.4.6.4.1 MYSQL
Java、C#などのプログラミング言語では、文字列の結合は、「1」+「3」、「a」+「b」などのプラス記号で実現できます.MYSQLでは、プラス記号「+」を使用して、次のSQLなどの2つの文字列を接続することもできます.
SELECT '12'+'33',FAge+'1' FROM T_Employee
                           :
'12'+'33' FAge+'1'
45 26
45 29
45 24
45 26
45 29
45 28
45 24
45 29
45 23

最初の列をよく観察して、驚きましたか?この列の表示結果は、私たちが望んでいる「1233」ではなく、「12」と「33」の2つの文字列を数字として2つの数の和を求めたものです.同じ数字を文字列にプラス記号「+」で接続しても、ここの2番目の列のような効果があります.
MYSQLで、プラス記号「+」で2つのフィールド(または複数のフィールド)を接続すると、MYSQLはフィールド値を数値タイプ(変換に失敗した場合はフィールド値が0)に変換し、フィールドの加算を試みます.したがって、計算された'12'+'33'のとき、MYSQLは「12」と「33」の2つの文字列を数値タイプの12と33に変換しようとし、12+33の値を計算します.これは、45の結果を得る理由です.同様に、FAge+'1'を計算する場合、FAgeは数値タイプであるため、変換する必要はなく、'1'は文字列タイプであるため、MYSQLは'1'を数値1に変換し、その後、FAge+1を計算列の値として計算する.
MYSQLは、プラス記号の両端のフィールド値を数値タイプに変換しようとします.変換に失敗した場合は、次のSQL文のようなフィールド値を0とします.
SELECT 'abc'+'123',FAge+'a' FROM T_Employee
                           :
'abc'+'123' FAge+'a'
123 25
123 28
123 23
123 25
123 28
123 27
123 23
123 28
123 22

MYSQLで文字列の結合を行うにはCONCAT関数を使用します.CONCAT関数では1つ以上のパラメータがサポートされています.パラメータタイプは文字列タイプでも非文字列タイプでも構いません.非文字列タイプのパラメータMYSQLでは文字列タイプに変換しようとします.CONCAT関数では、すべてのパラメータがパラメータの順に1つの文字列に結合されて戻り値になります.たとえば、次のSQL文を使用して、ユーザーの複数のフィールド情報を計算フィールドとして検索します.
SELECT CONCAT('   :',FNumber,'        :',FSalary/(FAge-21))
FROM T_Employee                        :
CONCAT('   :',FNumber,'        :',FSalary/(FAge-21))
   :DEV001         :2075.000000
   :DEV002         :328.685714
   :HR001        :1100.440000
   :HR002        :1300.090000
   :IT001         :557.142857
   :IT002         :466.666667
   :SALES001         :2500.000000
   :SALES002         :885.714286
   :SALES003         :1200.000000

CONCATは1つのパラメータのみの使用をサポートします.この場合のCONCATは、このパラメータ値を文字列タイプ値に変換しようとする関数と見なすことができます.MYSQLには、文字列の結合を行う別の関数CONCAT_も用意されています.WS,CONCAT_WSは、最初のパラメータ値が使用される区切り文字であり、残りのパラメータは、次のSQLのような接頭辞を実行する文字列値である指定された区切り文字を接頭辞の文字列間に追加できます.
SELECT CONCAT_WS(',',FNumber,FAge,FDepartment,FSalary) FROM T_Employee
                           :
CONCAT_WS(',',FNumber,FAge,FDepartment,FSalary)
DEV001,25,Development,8300.00
DEV002,28,Development,2300.80
HR001,23,HumanResource,2200.88
HR002,25,HumanResource,5200.36
IT001,28,InfoTech,3900.00
IT002,27,InfoTech,2800.00
SALES001,23,Sales,5000.00
SALES002,28,Sales,6200.00
SALES003,22,Sales,1200.00