2009-04-27 24 views

答えて

280

LEFT(colName, 1)でもこれも行います。これはSUBSTRING(colName, 1, 1)に相当します。

私はLEFTが好きです。私はそれがちょっときれいだと思っていますが、実際には違いはありません。

+0

私は、SQLサーバーについては知らないが、論理的にデータベースサーバーが最適化することができるかもしれませんインデックスを使用しているときは、SUBSTRINGよりもLEFTのほうがよくなります。 – thomasrutter

+7

@thomasrutter実行計画を見ると、SQL Server(少なくとも2008R2)は内部的に 'LEFT(colName、length)'を 'SUBSTRING(colName、1、length)'に変換します。だから**ここには最適化**がありません。それは単なる好みです。 –

11

SUBSTRING (MyColumn, 1 , 1)最初の文字はSUBSTRING (MyColumn, 1 , 2)です。

28

私が好む:

SUBSTRING (my_column, 1, 1) 

それは標準SQL-92構文、したがって、より移植性があるため。


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

SUBSTRING (my_column FROM 1 FOR 1) 

点が一方から他方へ変換する、あるであろう、したがって任意の同様のベンダー変化に、自明です。

p.s.私は、標準SQLの機能は、従来のcommalistsではないパラメータリストを持つことによって、意図的に反対であることを最近指摘しただけです。

+0

ありがとう、LEFT(str、n)は、私が使用しているフォーマットを含む多くのフォーマットではサポートされていません。 – GreySage

0

あなたはSQL文字列内の文字列の最初の文字を検索する場合

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

=> return 4 
1

INPUT

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 
4
SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student 
5

次のことで、これを達成するために簡単です:

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

をし、

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

@Result:his

-OR-

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

@Result:This i

関連する問題