Qual è il modo migliore per estrarre la prima parola di una stringa nella query sql server?Estrarre la prima parola di una stringa in una query di SQL Server
risposta
SELECT CASE CHARINDEX(' ', @Foo, 1)
WHEN 0 THEN @Foo -- empty or single word
ELSE SUBSTRING(@Foo, 1, CHARINDEX(' ', @Foo, 1) - 1) -- multi-word
END
Si potrebbe forse usare questo in un UDF:
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')
L'aggiunta dei seguenti prima dell'istruzione RETURN
risolverebbe i casi in cui uno spazio iniziale è stato incluso nel campo:
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)
La risposta di Marc mi ha dato la maggior parte del modo in cui avevo bisogno, ma dovevo andare con patIndex
anziché charIndex
perché a volte i caratteri diversi dagli spazi segnano le estremità delle parole dei miei dati. Qui sto usando '%[ /-]%'
per cercare spazio, barra o trattino.
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
Risultati ...
race_id race_description race_abbreviation
------- ------------------------- -----------------
1 White White
2 Black or African American Black
3 Hispanic/Latino Hispanic
Avvertenza: questo è per un piccolo insieme di dati (US federali categorie di segnalazione di gara); Non so cosa succederebbe alle prestazioni se ridimensionato a numeri enormi.
ho voluto fare qualcosa di simile senza fare una funzione separata, e si avvicinò con questo semplice approccio one-line:
DECLARE @test NVARCHAR(255)
SET @test = 'First Second'
SELECT SUBSTRING(@test,1,(CHARINDEX(' ',@test + ' ')-1))
Ciò restituirà il risultato "First"
E 'breve, semplicemente non così robusto, dato che presuppone che la tua stringa non inizi con uno spazio. Gestirà ingressi di una sola parola, ingressi di più parole e stringa vuota o ingressi NULL.
provate questo:
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
da tbl_races
Miglioramento della risposta di Ben Brandt per compensare, anche se la stringa inizia con lo spazio mediante l'applicazione di LTRIM(). Ho cercato di modificare la sua risposta ma ho rifiutato, quindi ora lo sto postando separatamente.
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. Query SQL Server per rimuovere l'ultima parola da una stringa
- 2. query MySQL per estrarre la prima parola da un campo
- 3. Togliere un po 'di una stringa prima di una parola
- 4. Ottieni la prima parola in una stringa di parole e spazi - Sottostringa prima parola prima dello spazio
- 5. TWIG come ottenere la prima parola di una stringa?
- 6. Estrarre la prima parola in un database SQLite3
- 7. Rimuovere la prima parola in una stringa Python?
- 8. Rimuovere la prima parola da una stringa in Java
- 9. Monitoraggio il progresso di una query SQL in SQL Server
- 10. Convertire una stringa in int utilizzando la query sql
- 11. Come utilizzare una query di selezione all'interno di una query di inserimento in SQL Server 2005
- 12. bloccato con una query in SQL Server
- 13. Estrarre parte di una stringa in una variabile in bash
- 14. Barra finale prima di una stringa di query. Cattiva pratica?
- 15. Ottieni lo schema di SQL Server tramite una query SQL?
- 16. come sapere quante righe saranno interessate prima di eseguire una query in microsoft sql server 2008
- 17. Modifica di una query sql server in sqlite
- 18. Ottieni la prima lettera di ogni parola in una stringa, in Javascript
- 19. stringa di formattazione una query SQL in sqlite3
- 20. attraversa la stringa C: ottieni l'ultima parola di una stringa
- 21. router ui angolare inserisce una stringa di query prima dell'hash
- 22. citazioni Android all'interno di una stringa di query SQL
- 23. Applicare una maschera per formattare una stringa in SQL Server Query/View
- 24. Nona parola in una stringa
- 25. stringa di Spalato da una virgola in SQL Server 2008
- 26. Cerca una parola in una stringa utilizzando la funzione php
- 27. Come aggiungere più uno (+1) a una colonna di SQL Server in una query SQL
- 28. Restituzione di una seconda riga di una query SQL
- 29. ottenere la prima lettera di ogni parola in una stringa utilizzando Objective-C
- 30. maiuscola prima parola di una frase in una stringa con più frasi
Grazie per questo UDF - ho notato che selezionare dbo [FirstWord] ('abc def') restituirà '' Nella maggior parte dei casi probabilmente avrete bisogno di tornare 'abc' – Imageree
'set. @value = ltrim (rtrim (@value)) 'potrebbe risolvere questo problema – th1rdey3