サーチ…
前書き
文字列関数は文字列値に対して操作を実行し、数値または文字列値を返します。
文字列関数を使用すると、データを結合したり、部分文字列を抽出したり、文字列を比較したり、文字列をすべて大文字または小文字に変換することができます。
構文
- CONCAT(string_value1、string_value2 [、string_valueN])
- LTRIM(character_expression)
- RTRIM(character_expression)
- SUBSTRING(式、開始、長さ)
- ASCII(character_expression)
- REPLICATE(string_expression、integer_expression)
- リバース(string_expression)
- UPPER(character_expression)
- TRIM([文字FROM]文字列)
- STRING_SPLIT(文字列、区切り文字)
- STUFF(character_expression、start、length、replaceWith_expression)
- REPLACE(string_expression、string_pattern、string_replacement)
備考
空白を整える
トリムは、選択の始めまたは終わりに書き込み領域を削除するために使用されます
MSSQLでは、単一のTRIM()
SELECT LTRIM(' Hello ') --returns 'Hello '
SELECT RTRIM(' Hello ') --returns ' Hello'
SELECT LTRIM(RTRIM(' Hello ')) --returns 'Hello'
MySqlとOracle
SELECT TRIM(' Hello ') --returns 'Hello'
連結する
(標準ANSI / ISO)SQLでは、文字列連結の演算子は||
。この構文は、SQL Server以外のすべての主要データベースでサポートされています。
SELECT 'Hello' || 'World' || '!'; --returns HelloWorld!
多くのデータベースでは、文字列を結合するためのCONCAT
関数がサポートされてCONCAT
ます。
SELECT CONCAT('Hello', 'World'); --returns 'HelloWorld'
CONCAT
を使用して2つ以上の文字列を結合することをサポートするデータベースもあります(Oracleではサポートしていません)。
SELECT CONCAT('Hello', 'World', '!'); --returns 'HelloWorld!'
一部のデータベースでは、非文字列型をキャストまたは変換する必要があります。
SELECT CONCAT('Foo', CAST(42 AS VARCHAR(5)), 'Bar'); --returns 'Foo42Bar'
暗黙の可逆変換を実行するデータベース(Oracleなど)もあります。例えば、 CONCAT
上のCLOB
およびNCLOB
得NCLOB
。数値とvarchar2
CONCAT
はvarchar2
などになります。
SELECT CONCAT(CONCAT('Foo', 42), 'Bar') FROM dual; --returns Foo42Bar
一部のデータベースでは、非標準の+
演算子を使用できます(ただし、 +
は数字でのみ動作します)。
SELECT 'Foo' + CAST(42 AS VARCHAR(5)) + 'Bar';
CONCAT
がサポートされていないSQL Server 2012では、 +
が文字列を結合する唯一の方法です。
大文字と小文字
SELECT UPPER('HelloWorld') --returns 'HELLOWORLD'
SELECT LOWER('HelloWorld') --returns 'helloworld'
部分文字列
構文は次のとおりですSUBSTRING ( string_expression, start, length )
。 SQL文字列は1インデックスであることに注意してください。
SELECT SUBSTRING('Hello', 1, 2) --returns 'He'
SELECT SUBSTRING('Hello', 3, 3) --returns 'llo'
これは、 LEN()
関数と組み合わせて使用され、不明な長さの文字列の最後のn
文字を取得することがよくあります。
DECLARE @str1 VARCHAR(10) = 'Hello', @str2 VARCHAR(10) = 'FooBarBaz';
SELECT SUBSTRING(@str1, LEN(@str1) - 2, 3) --returns 'llo'
SELECT SUBSTRING(@str2, LEN(@str2) - 2, 3) --returns 'Baz'
スプリット
文字区切り文字を使用して文字列式を分割します。 STRING_SPLIT()
はテーブル値関数です。
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
結果:
value
-----
Lorem
ipsum
dolor
sit
amet.
もの
文字列を別の文字列に入れ、特定の位置で0文字以上の文字を置き換えます。
注: start
位置は1でインデックス付けされています(インデックス化は0ではなく1で開始されます)。
構文:
STUFF ( character_expression , start , length , replaceWith_expression )
例:
SELECT STUFF('FooBarBaz', 4, 3, 'Hello') --returns 'FooHelloBaz'
長さ
SQLサーバー
LENは末尾のスペースをカウントしません。
SELECT LEN('Hello') -- returns 5
SELECT LEN('Hello '); -- returns 5
DATALENGTHは末尾のスペースをカウントします。
SELECT DATALENGTH('Hello') -- returns 5
SELECT DATALENGTH('Hello '); -- returns 6
ただし、DATALENGTHは、文字列を格納するために使用されるcharsetに依存する、文字列の基礎となるバイト表現の長さを返すことに注意してください。
DECLARE @str varchar(100) = 'Hello ' --varchar is usually an ASCII string, occupying 1 byte per char
SELECT DATALENGTH(@str) -- returns 6
DECLARE @nstr nvarchar(100) = 'Hello ' --nvarchar is a unicode string, occupying 2 bytes per char
SELECT DATALENGTH(@nstr) -- returns 12
オラクル
構文:Length(char)
例:
SELECT Length('Bible') FROM dual; --Returns 5
SELECT Length('righteousness') FROM dual; --Returns 13
SELECT Length(NULL) FROM dual; --Returns NULL
関連項目:LengthB、LengthC、Length2、Length4
置換
構文:
REPLACE(
検索する文字列,
文字列を検索および置換するため,
元の文字列の中に配置する文字列を)
例:
SELECT REPLACE( 'Peter Steve Tom', 'Steve', 'Billy' ) --Return Values: Peter Billy Tom
左右
構文は次のとおりです。
LEFT(文字列式、整数)
RIGHT(文字列式、整数)
SELECT LEFT('Hello',2) --return He
SELECT RIGHT('Hello',2) --return lo
Oracle SQLには、LEFTおよびRIGHT機能はありません。 SUBSTRとLENGTHでエミュレートできます。
SUBSTR(文字列式、1、整数)
SUBSTR(文字列式、長さ(文字列式)-integer + 1、整数)
SELECT SUBSTR('Hello',1,2) --return He
SELECT SUBSTR('Hello',LENGTH('Hello')-2+1,2) --return lo
逆
構文は次のとおりです。REVERSE(文字列式)
SELECT REVERSE('Hello') --returns olleH
レプリケート
REPLICATE
関数は、指定された回数だけ文字列を連結します。
構文は次のとおりです。REPLICATE(string-expression、integer)
SELECT REPLICATE ('Hello',4) --returns 'HelloHelloHelloHello'
REGEXP
文字列が正規表現(他の文字列で定義)と一致するかどうかをチェックします。
SELECT 'bedded' REGEXP '[a-f]' -- returns True
SELECT 'beam' REGEXP '[a-f]' -- returns False
sqlの置換と更新クエリの選択と更新
SQLのReplace関数は、文字列の内容を更新するために使用されます。 MySQL、Oracle、およびSQL Serverの場合、関数呼び出しはREPLACE()です。
Replace関数の構文は次のとおりです。
REPLACE (str, find, repl)
次の例では、 South
出現をEmployeesテーブルのSouthern
に置き換えます。
ファーストネーム | 住所 |
---|---|
ジェームス | 南ニューヨーク |
ジョン | サウスボストン |
マイケル | サウスサンディエゴ |
Selectステートメント:
次のReplace関数を適用すると:
SELECT
FirstName,
REPLACE (Address, 'South', 'Southern') Address
FROM Employees
ORDER BY FirstName
結果:
ファーストネーム | 住所 |
---|---|
ジェームス | 南部ニューヨーク |
ジョン | 南ボストン |
マイケル | サンディエゴ南部 |
更新声明:
置換関数を使用して、以下のアプローチでテーブルの永続的な変更を行うことができます。
Update Employees
Set city = (Address, 'South', 'Southern');
より一般的な方法は、WHERE句と組み合わせてこれを使用することです。
Update Employees
Set Address = (Address, 'South', 'Southern')
Where Address LIKE 'South%';
パーセナム
DATABASE:SQL Serverの
PARSENAME関数は、指定された文字列の特定の部分(オブジェクト名)を返します。オブジェクト名には、オブジェクト名、所有者名、データベース名、サーバー名などの文字列を含めることができます。
詳細情報MSDN:PARSENAME
構文
PARSENAME('NameOfStringToParse',PartIndex)
例
オブジェクト名を取得するには、パート・インデックス1
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',1) // returns `ObjectName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',1) // returns `Student`
スキーマ名を取得するには、パート・インデックス2
使用します。
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',2) // returns `SchemaName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',2) // returns `school`
データベース名を取得するには、パート・インデックス3
使用します。
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',3) // returns `DatabaseName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',3) // returns `SchoolDatabase`
サーバー名を取得するには、パート・インデックス4
使用します。
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',4) // returns `ServerName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',4) // returns `[1012-1111]`
PARSENAMEは戻り値を返すnullは指定されたオブジェクト名の文字列に存在しない
INSTR
部分文字列の最初の出現のインデックスを返します(見つからない場合はゼロ)。
構文:INSTR(文字列、部分文字列)
SELECT INSTR('FooBarBar', 'Bar') -- return 4
SELECT INSTR('FooBarBar', 'Xar') -- return 0