2012-10-07 71 views
31

Quiero seleccionar un campo de la tabla y subscribirlo.Cómo subscribir una columna de tabla MySQL

Por ejemplo:

VAN1031 --> 1031 

He intentado esto, pero es la sintaxis incorrecta:

SELECT SUBSTR(R.regnumber,3,3) from registration R 

¿Cómo puede hacerse esto?

+2

¡Por supuesto! http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring - ps, sería 'SELECT SUBSTRING ('VAN1031', 4, 4)' - comienza en el cuarto personaje y tomar 4 caracteres de la cadena ;-) – dash

+0

'seleccionar" pingüinos ", substr (" pingüinos ", 1, 3)' impresiones: 'penguins pen' –

Respuesta

23

No es necesario el tercer argumento (longitud) si desea seleccionar todos los caracteres a la derecha de un índice específico:

SELECT SUBSTR(R.regnumber, 4) 
FROM registration AS R 

También ha cambiado el índice de principio a 4, porque en cadenas SQL tienen 1 indexado y no 0 indexado, ya que se encuentran en muchos lenguajes de programación populares.

+0

No sé por qué' substr (col, 4) 'no no funciona para mí, y tengo que usarlo así: 'substr (col, 1, 4)'. ¿por qué? Mi problema está relacionado con la versión de MySQL? – Shafizadeh

6

Puede utilizar SUBSTRING():

select substring(col1, 4) 
from table1 

Ver SQL Fiddle with Demo. Por lo que su consulta sería:

SELECT substring(R.regnumber,4) 
from registration R 

de si desea especificar el número de caracteres para volver:

select substring(col1, 4, 4) 
from table1 
22

que puede utilizar:

SUBSTR(string,position) 
SUBSTR(string,position,length) 
SUBSTRING_INDEX(string, delimiter, count) 

Ejemplos:

command          prints 
------------------------------------------- ----------- 
select substr("abcd", 1, 1)     #a 
select substr("abcd", 1, 2)     #ab 
select substr("abcd", 2, 1)     #b 
select substr("abcd", 2, 2)     #bc 
select substr("abcd", -2, 1)     #c 
select substr("abcd", -2, 2)     #cd 

select substring_index('ababab', 'b', 1); #a 
select substring_index('ababab', 'b', 2); #aba 
select substring_index('ababab', 'b', 3); #ababa 
select substring_index('ababab', 'b', -1); # 
select substring_index('ababab', 'b', -2); #ab 
select substring_index('ababab', 'b', -3); #abab 

select substr("abcd", 2)      #bcd 
select substr("abcd", 3)      #cd 
select substr("abcd", 4)      #d 
select substr("abcd", -2)     #cd 
select substr("abcd", -3)     #bcd 
select substr("abcd", -4)     #abcd 

De this link.

+6

En sus ejemplos, 'ababab' debe reemplazarse con' abcdef' ya que la salida es confusa debido a la repetición del texto 'ab'. – machineaddict

1
SELECT substring(R.regnumber FROM 4) FROM registration AS R; 

y si usted quiere tomar parte como un entero no es una cadena puede escribir:

SELECT CAST(substring(R.regnumber FROM 4) AS UNSIGNED) FROM registration as R; 
0

me di cuenta de que el índice de MySQL se inicia desde cero en lugar de 1 como muchos lenguajes de programación hicieron.

SELECT SUBSTRING(R.regNumber,1,3) FROM registration AS R 

Devuelve VAN y

SELECT SUBSTRING(R.regNumber,4) FROM registration AS R 

devuelve la parte restante de la cadena como 1031

0

A veces es necesario coger la columna sin algunos últimos caracteres. Por ejemplo, tengo:

This is a string 

Digamos que por alguna razón quiero columna sin últimos 6 caracteres:

This is a 

Podemos hacer (usando respuesta @bluefeet 'S y tamaño):

select substring(col1, 1,LENGTH(col1)-7) 
from table1 

Solo fue un ejemplo, pero ya entendiste la idea, la estoy usando para arreglar una importación incorrecta de la base de datos.

Cuestiones relacionadas