サーチ…


前書き

文字列関数は文字列値に対して操作を実行し、数値または文字列値を返します。

文字列関数を使用すると、データを結合したり、部分文字列を抽出したり、文字列を比較したり、文字列をすべて大文字または小文字に変換することができます。

構文

  • 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)

備考

Transact-SQL / Microsoftの文字列関数リファレンス

MySQLの文字列関数リファレンス

PostgreSQLの文字列関数リファレンス

空白を整える

トリムは、選択の始めまたは終わりに書き込み領域を削除するために使用されます

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およびNCLOBNCLOB 。数値とvarchar2 CONCATvarchar2などになります。

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

MySQL 3.19

文字列が正規表現(他の文字列で定義)と一致するかどうかをチェックします。

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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow