Wie erhalte ich das erste Zeichen einer Zeichenfolge in SQL?


262

Ich habe eine SQL-Spalte mit einer Länge von 6. Jetzt möchte ich nur das erste Zeichen dieser Spalte nehmen. Gibt es eine String-Funktion in SQL, um dies zu tun?

Antworten:


436

LEFT(colName, 1)werde dies auch tun. Es ist gleichbedeutend mit SUBSTRING(colName, 1, 1).

Ich mag es LEFT, da ich es etwas sauberer finde, aber es gibt wirklich keinen Unterschied.


2
Ich weiß nichts über SQL Server, aber logischerweise kann ein Datenbankserver LEFT möglicherweise besser optimieren als SUBSTRING, wenn er einen Index verwendet.
Thomasrutter

19
@thomasrutter, Betrachtet man einen Ausführungsplan, übersetzt SQL Server (mindestens 2008R2) intern LEFT(colName, length)in SUBSTRING(colName, 1, length). Hier gibt es also keine Optimierungen , es ist nur eine Präferenz.
Alexander Abakumov

44

Ich bevorzuge:

SUBSTRING (my_column, 1, 1)

weil es Standard SQL-92-Syntax ist und daher portabler.


Genau genommen wäre die Standardversion

SUBSTRING (my_column FROM 1 FOR 1)

Der Punkt ist, dass die Transformation von einem zum anderen und damit zu einer ähnlichen Anbietervariante trivial ist.

ps Ich wurde erst kürzlich darauf hingewiesen, dass Funktionen in Standard-SQL absichtlich gegensätzlich sind, indem sie Parameterlisten haben, die nicht die herkömmlichen Commalisten sind, um sie leicht als vom Standard stammend zu identifizieren!


1
Vielen Dank, LEFT (str, n) wird von vielen Formaten (einschließlich des von mir verwendeten) nicht unterstützt.
GreySage

1
Warum beginnt der Index mit 1 und nicht mit 0? Dies gibt das gleiche Ergebnis zurück: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). Was ist es in Position 0?
FrenkyB

19

SUBSTRING ( MyColumn, 1 , 1 )für das erste Zeichen und SUBSTRING ( MyColumn, 1 , 2 )für die ersten beiden.



13

Es ist einfach durch Folgendes zu erreichen

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

Entweder

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

@Result = his

oder

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

@Result = This i


3

EINGANG

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

Wenn Sie das erste Zeichen einer Zeichenfolge in einer SQL-Zeichenfolge suchen

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

=> return 4

2

Wählen Sie die ersten beiden Zeichen im ausgewählten Feld mit Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.