ほとんどの場合、SQLで文字列と数値を連結することは、2つの文字列を連結することと同じです。
ほとんどのDBMSは、文字列と数値を両方とも文字列であるかのように連結します。これは、通常、連結操作の前に数値が文字列に変換されるためです。
ほとんどの主要なRDBMSは、CONCAT()
を提供します 連結操作用の関数、およびCONCAT_WS()
連結された引数を区切るための区切り文字を指定できる関数。
ほとんどの主要なRDBMSには、オペランドを連結できる文字列連結演算子も含まれています。
CONCAT()
機能
ほとんどの主要なRDBMSは、CONCAT()
を提供します 文字列引数を連結するための関数。通常、文字列以外の引数は、連結が発生する前に文字列に変換されます。
例:
SELECT CONCAT('Player', 456);
結果:
Player456
連結された引数の間にスペースを含める場合は、文字列の1つにスペースを追加するか、別の引数としてスペースを含めることができます。
SELECT
CONCAT('Player ', 456) AS "Option 1",
CONCAT('Player', ' ', 456) AS "Option 2";
結果:
+------------+------------+ | Option 1 | Option 2 | +------------+------------+ | Player 456 | Player 456 | +------------+------------+
CONCAT()
を持つRDBMS 機能には、MySQL、MariaDB、SQL Server、Oracle、およびPostgreSQLが含まれます。
SQLiteにはCONCAT()
がありません 働き。 SQLiteはします 文字列連結演算子があります(以下を参照)。
CONCAT_WS()
機能
スペースを含める別の方法は、CONCAT_WS()
を使用することです。 働き。この関数を使用すると、連結されたすべての引数を区切るために使用される区切り文字を指定できます。
例:
SELECT CONCAT_WS(' ', 'Player', 456);
結果:
Player 456
この関数は、連結する引数がたくさんある場合に特に便利です。
SELECT CONCAT_WS(', ', 'Red', 2, 'Green', 456, 'Black');
結果:
Red, 2, Green, 456, Black
このような場合、セパレータを指定する必要があるのは1回だけです。この例では、区切り文字としてカンマとスペースを指定しました。
CONCAT_WS()
を持つRDBMS 関数には、MySQL、MariaDB、SQL Server、およびPostgreSQLが含まれます。
SQLiteとOracleにはCONCAT_WS()
がありません 機能しますが、 文字列連結演算子があります(以下を参照)。
文字列連結演算子
ほとんどのRDBMSには、オペランドを連結する文字列連結演算子が含まれています。
SQLiteを使用している場合、これが唯一のオプションです。
例:
SELECT 'Player' || 456;
結果:
Player456
MySQLでは、最初にパイプ連結演算子を有効にする必要があることに注意してください。
MariaDBについても同じことが言えます。
SQL Server
上記の例はSQLServerでは機能しません。 SQL Serverでは、プラス記号(+
)を使用します )文字列連結演算子。
また、連結を試みる前に、数値を文字列に変換する必要があります:
SELECT 'Player' + CAST(456 AS varchar(3));
結果:
Player456
最初に数値を文字列に変換せずに実行しようとすると、次のようになります。
SELECT 'Player' + 456;
結果:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Player' to data type int.
SQL Serverは、2つの数値を追加しようとしていると見なします(+
のため) は加算演算子でもあります)。したがって、オペランドの1つが文字列であるため、エラーが返されます。