2009-04-27 146 views

回答

280

LEFT(colName, 1)也會這樣做。這相當於SUBSTRING(colName, 1, 1)

我喜歡LEFT,因爲我覺得它有點乾淨,但實際上,兩種方式都沒有區別。

+0

我不知道有關SQL服務器,但在邏輯數據庫服務器可能能夠優化當它使用索引時,它比SUBSTRING更好。 – thomasrutter 2009-04-27 05:26:09

+7

@thomasrutter,查看執行計劃,SQL Server(至少2008R2)在內部將'LEFT(colName,length)'轉換爲'SUBSTRING(colName,1,length)'。所以**這裏沒有任何優化**,這只是一個偏好。 – 2014-09-15 15:15:53

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中的函數是故意相反的,因爲它們的參數列表並不是傳統的commalist,爲了使它們易於被標識爲標準!

+0

謝謝,LEFT(str,n)不支持許多格式(包括我使用的格式)。 – GreySage 2016-03-20 21:31:38

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

- 或 -

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

@Result:This i

相關問題