SQLで文字列の最初の文字を取得するにはどうすればよいですか?


262

長さ6のSQL列があります。次に、その列の最初の文字のみを取得します。これを行うためのSQLの文字列関数はありますか?

回答:


436

LEFT(colName, 1)これも行います。と同等SUBSTRING(colName, 1, 1)です。

LEFTはそれが少しすっきりしているので好きですが、実際にはどちらの方法でも違いはありません。


2
SQLサーバーについては知りませんが、データベースサーバーは、インデックスを使用している場合、論理的にはSUBSTRINGよりもLEFTを最適化できる可能性があります。
thomasrutter 2009

19
@thomasrutter、実行プランを見ると、SQL Server(少なくとも2008R2)は内部的にに変換LEFT(colName, length)されSUBSTRING(colName, 1, length)ます。したがって、ここでは最適化は行われず、単なる設定です。
Alexander Abakumov 2014

44

私は好む:

SUBSTRING (my_column, 1, 1)

標準SQL-92構文であり、移植性が高いためです。


厳密に言えば、標準バージョンは

SUBSTRING (my_column FROM 1 FOR 1)

重要なのは、1つの形式から別の形式への変換、したがって同様のベンダーのバリエーションへの変換は簡単なことです。

ps最近、標準SQLの関数が、標準からのものであることを簡単に識別できるようにするために、従来のコンマリストではないパラメーターリストを使用することにより、意図的に反対であることを指摘されました!


1
ありがとうございます。LEFT(str、n)は、多くの形式(私が使用している形式を含む)ではサポートされていません。
GreySage 2016年

1
インデックスが0ではなく1で始まるのはなぜですか?これは同じ結果を返します:SUBSTRING(my_column、1、1)= SUBSTRING(my_column、0、2)。ポジション0とは何ですか?
FrenkyB

19

SUBSTRING ( MyColumn, 1 , 1 )最初の文字とSUBSTRING ( MyColumn, 1 , 2 )最初の2つ。



13

以下によって達成するのは簡単です

DECLARE @SomeString NVARCHAR(20) = 'This is some string'
DECLARE @Result NVARCHAR(20)

どちらか

SET @Result = SUBSTRING(@SomeString, 2, 3)
SELECT @Result

@Result = his

または

SET @Result = LEFT(@SomeString, 6)
SELECT @Result

@Result = This i


3

入力

STRMIDDLENAME
--------------
Aravind Chaterjee
Shivakumar
Robin Van Parsee

SELECT STRMIDDLENAME, 
CASE WHEN INSTR(STRMIDDLENAME,' ',1,2) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1)||
SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,2)+1,1)
WHEN INSTR(STRMIDDLENAME,' ',1,1) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1)
ELSE SUBSTR(STRMIDDLENAME,1,1)
END AS FIRSTLETTERS
FROM Dual;

OUTPUT
STRMIDDLENAME                    FIRSTLETTERS
---------                        -----------------
Aravind Chaterjee                AC           
Shivakumar                       S
Robin Van Parsee                 RVP

2

SQL文字列で文字列の最初の文字を検索すると

SELECT CHARINDEX('char', 'my char')

=> return 4

2

選択したフィールドの最初の2文字を選択 Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.