¿Cuál es la mejor forma de extraer la primera palabra de una cadena en la consulta del servidor sql?Extraiga la primera palabra de una cadena en una consulta de SQL Server
Respuesta
SELECT CASE CHARINDEX(' ', @Foo, 1)
WHEN 0 THEN @Foo -- empty or single word
ELSE SUBSTRING(@Foo, 1, CHARINDEX(' ', @Foo, 1) - 1) -- multi-word
END
tal vez podría utilizar esto en una 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')
Añadiendo lo siguiente antes de la declaración RETURN
resolvería para los casos en que un espacio inicial se incluyó en el 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 respuesta de Marc me llevó la mayor parte del camino a lo que necesitaba, pero tenía que irme con patIndex
en lugar de charIndex
porque a veces los caracteres que no sean espacios marcan los extremos de las palabras de mis datos. Aquí estoy usando '%[ /-]%'
para buscar espacio, barra o guión.
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
resultados ...
race_id race_description race_abbreviation
------- ------------------------- -----------------
1 White White
2 Black or African American Black
3 Hispanic/Latino Hispanic
Advertencia: esto es para un conjunto pequeño de datos (US federales categorías de información raza); No sé qué sucedería con el rendimiento cuando se escalara en grandes cantidades.
que quería hacer algo como esto sin hacer una función separada, y se acercó con este sencillo enfoque de una sola línea:
DECLARE @test NVARCHAR(255)
SET @test = 'First Second'
SELECT SUBSTRING(@test,1,(CHARINDEX(' ',@test + ' ')-1))
Esto devolverá el resultado "primero"
Es corto, simplemente no es tan robusto, ya que supone que su cadena no comienza con un espacio. Controlará las entradas de una palabra, las entradas de varias palabras y las cadenas vacías o las entradas NULL.
Prueba esto:
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
de tbl_races
Mejora de la respuesta de Ben Brandt para compensar incluso si la cadena comienza con el espacio mediante la aplicación de LTRIM(). Intenté editar su respuesta, pero la rechacé, por lo que ahora la publico aquí por separado.
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. Eliminar la primera palabra de una cadena en Java
- 2. ¿Se elimina la primera aparición de palabra de una cadena?
- 3. extraer la primera palabra de una cadena - expresiones regulares
- 4. Recortar una cadena en java para obtener la primera palabra
- 5. Sybase, ejecute una cadena como consulta sql
- 6. ¿Cómo comparar una consulta SQL Server?
- 7. palabra coincidente en SQL Server
- 8. Consulta MySQL para extraer la primera palabra de un campo
- 9. Cómo usar una consulta de selección dentro de una consulta de inserción en SQL Server 2005
- 10. Convierta una cadena a int usando la consulta sql
- 11. ¿Cuál es la mejor manera de escribir en mayúscula la primera letra de cada palabra en una cadena en SQL Server
- 12. Capitalizar/Poner en mayúscula la primera letra de cada palabra en una cadena en Matlab?
- 13. ¿Cómo puedo escribir en mayúscula la primera letra de cada palabra en una cadena en Perl?
- 14. Cómo encontrar sólo letras mayúsculas en la palabra a través de la consulta en SQL Server
- 15. Cómo generar una secuencia de comandos de la tabla mediante la consulta SQL en SQL Server
- 16. Obtenga la primera letra de cada palabra en una cadena, en Javascript
- 17. SQL Server Linked Server Ejemplo de consulta
- 18. ¿Cómo se escribe en mayúscula la primera letra de la primera palabra en una oración?
- 19. Capitaliza automáticamente la primera letra de la primera palabra en una nueva oración en LaTeX
- 20. Extraiga números de punto flotante de una cadena en PHP
- 21. ¿Qué cerraduras se adquieren en una consulta en SQL Server?
- 22. Seguimiento de la ejecución de una consulta SQL en SQL SERVER
- 23. Consulta SQL para agregar una nueva columna después de una columna existente en SQL Server 2005
- 24. Nth palabra en una cadena
- 25. dividir una cadena en caracteres individuales en SQL Server 2005
- 26. Instrucción SQL para encontrar la última palabra en la cadena
- 27. ¿Cómo puedo eliminar la primera palabra de una línea?
- 28. Eliminar una palabra específica de una cadena
- 29. Selector de primera palabra
- 30. Solicitud de consulta sql por primera letra
Gracias a este UDF - me di cuenta de que seleccione DBO [FirstWord] ('abc def') volverá '' En la mayoría de los casos es probable que desee volver 'abc' – Imageree
'set. @value = ltrim (rtrim (@value)) 'podría resolver este problema – th1rdey3