2009-04-27 14 views

Odpowiedz

280

LEFT(colName, 1) również to zrobi. Jest to odpowiednik SUBSTRING(colName, 1, 1).

Podoba mi się LEFT, ponieważ uważam, że jest nieco czystszy, ale tak naprawdę, nie ma różnicy w żaden sposób.

+0

nie wiem o serwerze SQL, ale logicznie serwer bazy danych może być w stanie zoptymalizować LEFT lepsze niż SUBSTRING, gdy używa indeksu. – thomasrutter

+7

@thomasrutter, Patrząc na plan wykonania, SQL Server (co najmniej 2008R2) wewnętrznie tłumaczy 'LEFT (colName, length)' na 'SUBSTRING (colName, 1, length)'. Więc ** nie ma żadnych optymalizacji ** tutaj, to tylko preferencja. –

11

SUBSTRING (MyColumn, 1 , 1) dla pierwszej postaci i SUBSTRING (MyColumn, 1 , 2) dla pierwszych dwóch.

28

wolę:

SUBSTRING (my_column, 1, 1) 

ponieważ jest to standardowa składnia SQL-92, a zatem bardziej przenośne.


Ściśle mówiąc, w wersji standardowej będzie

SUBSTRING (my_column FROM 1 FOR 1) 

Chodzi o to, przekształcenie z jednego do drugiego, a tym samym podobnego do zmienności dostawcy jest trywialne.

p.s. Niedawno zauważyłem, że funkcje w standardowym SQL są celowo przeciwne, ponieważ mają listy parametrów, które nie są konwencjonalnymi komisjonistami, aby uczynić je łatwo identyfikującymi jako pochodzące ze standardu!

+0

Dziękujemy, LEWY (str, n) nie jest obsługiwany przez wiele formatów (w tym ten, którego używam). – GreySage

0

Jeśli szukać pierwszy char string w SQL ciąg

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

=> return 4 
1

WEJŚCIE

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

Jest to proste do osiągnięcia tego celu poprzez następujące:

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

i albo

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

@Result: his

LUB

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

@Result: This i