seleccionar datos hasta un espacio?


Tengo un campo de base de datos MSSQL que se parece a los siguientes ejemplos:

u129  james
u300  chris
u300a jim
u202  jane
u5    brian
u5z   brian2

¿Hay alguna forma de seleccionar el primer conjunto de caracteres? Básicamente seleccionar todos los caracteres hasta el espacio de la primera línea?

Intenté jugar con LEFT, RIGHT, LEN, pero no pude encontrar una manera de hacerlo con longitudes de cadena variables como en mi ejemplo.

Gracias!

Author: SkyeBoniwell, 2012-11-20

4 answers

Puedes usar una combinación de LEFT y CHARINDEX para encontrar el índice del primer espacio, y luego agarrar todo a la izquierda de eso.

 SELECT LEFT(YourColumn, charindex(' ', YourColumn) - 1) 

Y en caso de que alguna de sus columnas no tenga un espacio en ellas:

SELECT LEFT(YourColumn, CASE WHEN charindex(' ', YourColumn) = 0 THEN 
    LEN(YourColumn) ELSE charindex(' ', YourColumn) - 1 END)
 71
Author: LittleBobbyTables,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-20 20:22:20
select left(col, charindex(' ', col) - 1)
 2
Author: Blorgbeard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-20 20:00:24

Una alternativa si a veces no tiene espacios no desea usar la instrucción CASE

select REVERSE(RIGHT(REVERSE(YourColumn), LEN(YourColumn) - CHARINDEX(' ', REVERSE(YourColumn))))

Esto funciona en SQL Server, y de acuerdo con mi búsqueda MySQL tiene las mismas funciones

 1
Author: rayzinnz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-06 03:49:58

Si la primera columna es siempre del mismo tamaño (incluidos los espacios), entonces puede tomar esos caracteres (a través de LEFT) y limpiar los espacios (con RTRIM):

SELECT RTRIM(LEFT(YourColumn, YourColumnSize))

Alternativamente, puede extraer el segundo (o tercero, etc.) columna (usando SUBSTRING):

SELECT RTRIM(SUBSTRING(YourColumn, PreviousColumnSizes, YourColumnSize))

Un beneficio de este enfoque (especialmente si YourColumn es el resultado de un cálculo) es que YourColumn solo se especifica una vez.

 1
Author: camerondm9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-08 02:40:04