Was ist der beste Weg, das erste Wort einer Zeichenfolge in SQL Server-Abfrage zu extrahieren?Extrahieren Sie das erste Wort einer Zeichenfolge in einer SQL Server-Abfrage
Antwort
SELECT CASE CHARINDEX(' ', @Foo, 1)
WHEN 0 THEN @Foo -- empty or single word
ELSE SUBSTRING(@Foo, 1, CHARINDEX(' ', @Foo, 1) - 1) -- multi-word
END
Sie könnten vielleicht diese in einem UDF verwenden:
CREATE FUNCTION [dbo].[FirstWord] (@value varchar(max))
RETURNS varchar(max)
AS
BEGIN
RETURN CASE CHARINDEX(' ', @value, 1)
WHEN 0 THEN @value
ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END
END
GO -- test:
SELECT dbo.FirstWord(NULL)
SELECT dbo.FirstWord('')
SELECT dbo.FirstWord('abc')
SELECT dbo.FirstWord('abc def')
SELECT dbo.FirstWord('abc def ghi')
Hinzufügen der folgenden bevor die RETURN
Erklärung für die Fälle lösen würde, wo ein führender Platz im Feld aufgenommen wurde:
SET @Value = LTRIM(RTRIM(@Value))
A slight tweak to the function returns the next word from a start point in the entry CREATE FUNCTION [dbo].[GetWord] ( @value varchar(max) , @startLocation int ) RETURNS varchar(max) AS BEGIN SET @value = LTRIM(RTRIM(@Value)) SELECT @startLocation = CASE WHEN @startLocation > Len(@value) THEN LEN(@value) ELSE @startLocation END SELECT @value = CASE WHEN @startLocation > 1 THEN LTRIM(RTRIM(RIGHT(@value, LEN(@value) - @startLocation))) ELSE @value END RETURN CASE CHARINDEX(' ', @value, 1) WHEN 0 THEN @value ELSE SUBSTRING(@value, 1, CHARINDEX(' ', @value, 1) - 1) END END GO SELECT dbo.GetWord(NULL, 1) SELECT dbo.GetWord('', 1) SELECT dbo.GetWord('abc', 1) SELECT dbo.GetWord('abc def', 4) SELECT dbo.GetWord('abc def ghi', 20)
Marcs Antwort brachte mir den größten Teil davon, was ich brauchte, aber ich musste mitgehenstatt charIndex
weil manchmal andere Zeichen als Leerzeichen die Enden der Wörter meiner Daten markieren. Hier verwende ich '%[ /-]%'
, um nach Leerzeichen, Schrägstrich oder Bindestrich zu suchen.
Select race_id, race_description
, Case patIndex ('%[ /-]%', LTrim (race_description))
When 0 Then LTrim (race_description)
Else substring (LTrim (race_description), 1, patIndex ('%[ /-]%', LTrim (race_description)) - 1)
End race_abbreviation
from tbl_races
Ergebnisse ...
race_id race_description race_abbreviation
------- ------------------------- -----------------
1 White White
2 Black or African American Black
3 Hispanic/Latino Hispanic
Caveat: dies für einen kleinen Datensatz ist (US-Bundes Rennen Meldekategorien); Ich weiß nicht, was mit der Leistung passieren würde, wenn man auf große Zahlen skaliert.
Ich wollte, ohne eine separate Funktion, so etwas zu tun, und kam mit diesem einfachen einzeiligen Ansatz bis:
DECLARE @test NVARCHAR(255)
SET @test = 'First Second'
SELECT SUBSTRING(@test,1,(CHARINDEX(' ',@test + ' ')-1))
Dies würde das Ergebnis zurückgeben „First“
es kurz ist, nur nicht so robust, da es davon ausgeht, dass Ihre Zeichenfolge nicht mit einem Leerzeichen beginnt. Es wird Ein-Wort-Eingaben, Mehrwort-Eingaben und leere Zeichenfolge oder NULL-Eingaben verarbeiten.
Try This:
Select race_id, race_description
, Case patIndex ('%[ /-]%', LTrim (race_description))
When 0 Then LTrim (race_description)
Else substring (LTrim (race_description), 1, patIndex ('%[ /-]%', LTrim (race_description)) - 1)
End race_abbreviation
von tbl_races
Verbesserung der Antwort Ben Brandts sogar zu kompensieren, wenn die Zeichenfolge mit Platz beginnt mit LTRIM Anwendung(). Versucht, seine Antwort zu bearbeiten, aber abgelehnt, also poste ich es jetzt hier separat.
DECLARE @test NVARCHAR(255)
SET @test = 'First Second'
SELECT SUBSTRING(LTRIM(@test),1,(CHARINDEX(' ',LTRIM(@test) + ' ')-1))
DECLARE @string NVARCHAR(50)
SET @string = 'CUT STRING'
SELECT LEFT(@string,(PATINDEX('% %',@string)))
- 1. Entfernen Sie das erste Wort in einer Python-Zeichenfolge?
- 2. extrahieren das genaue Wort aus einer Zeichenfolge in Power
- 3. Ein Wort aus einer Zeichenfolge extrahieren
- 4. Wie extrahieren Wort aus Zeichenfolge in sql
- 5. Mit XSLT 1.0, wie Sie nur das erste Wort einer Zeichenfolge in einer Variablen speichern
- 6. So extrahieren Sie das erste "Wort" nach Klammer
- 7. Eingabe einer Zeichenfolge Wort für Wort
- 8. Letztes Wort in Zeichenfolge extrahieren in R
- 9. Eine Zahl aus einer 1-Wort-Zeichenfolge extrahieren
- 10. Längstes Wort in einer Zeichenfolge
- 11. C extrahieren Wort aus einer Zeichenfolge zwischen zwei Wörtern
- 12. So finden Sie das erste Zeichen in einer C++ - Zeichenfolge
- 13. Ruby entfernen Sie das erste Wort von der Zeichenfolge
- 14. Attribute einer Zeichenfolge extrahieren
- 15. TWIG Wie bekomme ich das erste Wort einer Zeichenkette?
- 16. Wie erhält man das erste Wort eines Satzes in PHP?
- 17. Lese jedes Wort in einer Zeichenfolge C++
- 18. wie ein Wort der erste Vorkommen von Zeichenfolge in SQL
- 19. Wie preg_match erste Auftreten in einer Zeichenfolge
- 20. Alles nach einem bestimmten Wort in einer SQL-Zeichenfolge löschen
- 21. Entfernen Sie das erste Zeichen aus einer Zeichenfolge
- 22. Java - Optimieren Sie das Suchen einer Zeichenfolge in einer Liste
- 23. Extrahieren Sie Buchstaben aus einer Zeichenfolge in R
- 24. kürzester Weg, um das erste Zeichen von jedem Wort in einer Zeichenfolge zu erhalten
- 25. Verwenden von Perl, um nur das erste Wort jeder Zeile in einer Zeichenfolge zu erhalten?
- 26. Parsing einer Zeichenfolge mit Token für das erste und letzte Wort (in C)
- 27. Holen Sie sich das erste Wort in einem String von Wörtern & Plätze - Substring erste Wort vor Raum
- 28. Das letzte Wort aus einer Zeichenfolge in Javascript abrufen
- 29. Sql wie Abfrage, die das erste Wort vollständig ignorieren
- 30. Extrahieren Sie das Wort out of string mit Regex
Vielen Dank für diese UDF - Ich bemerkte, dass wählen dbo [Firstword] ('abc def') kehrt '' In den meisten Fällen werden Sie wahrscheinlich zurückkehren wollen 'abc' – Imageree
'gesetzt. @value = ltrim (rtrim (@value)) 'könnte dieses Problem lösen – th1rdey3