Me gustaría obtener todos los caracteres de un campo antes de un espacio.
Por ejemplo, si field1
es"chara ters"
Quiero que vuelva "chara"
¿Cómo se vería esta declaración de selección?
Me gustaría obtener todos los caracteres de un campo antes de un espacio.
Por ejemplo, si field1
es"chara ters"
Quiero que vuelva "chara"
¿Cómo se vería esta declaración de selección?
Respuestas:
SELECT LEFT(field1,LOCATE(' ',field1) - 1)
Tenga en cuenta que si la cadena en cuestión no contiene espacios, esto devolverá una cadena vacía.
select SUBSTRING_INDEX( field1, ' ', 1 ) from table;
será la elección si queremos tener una cadena completa si no hay espacio.
SUBSTRING_INDEX
) es "mejor" como solución general porque conservará los valores que no contienen el delimitador, en lugar de dar como resultado un valor en blanco.
A continuación se muestra otro método que funciona y puede parecer un poco más simple para algunos. Utiliza la función SUBSTRING_INDEX MySQL . Un 1 devuelve todo antes del primer espacio y un -1 devuelve todo lo que está después del último espacio.
Esto devuelve 'chara':
SELECT SUBSTRING_INDEX( field1, ' ', 1 )
Esto devuelve 'ters':
SELECT SUBSTRING_INDEX( field1, ' ', -1 )
Detalles
Un valor positivo buscará su carácter especificado desde el principio de la cadena, y un valor negativo comenzará desde el final de la cadena. El valor del número indica la cantidad de su carácter especificado que debe buscar antes de devolver la pieza restante de la cadena. Si el carácter que está buscando no existe, se devolverá el valor del campo completo.
En este caso, un -2 devolvería todo a la derecha del penúltimo espacio, que no existe en este ejemplo, por lo que se devolverá todo el valor del campo.
Necesitarías algunas operaciones de cadena para eso. Suponiendo que cada campo tiene al menos un carácter de espacio:
SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;
Enfoque seguro:
SELECT IF(
LOCATE(' ', field1),
SUBSTR(field1, 0, LOCATE(' ', field1)),
field1
) FROM your_table;
SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;