2011-05-26 64 views
151

que tengo tres columnas en una tabla de SQLite:cómo concatenar cadenas con relleno en sqlite

Column1 Column2 Column3 
    A   1   1 
    A   1   2 
    A   12   2 
    C   13   2 
    B   11   2 

necesito seleccionar Column1-Column2-Column3 (por ejemplo A-01-0001). Quiero almohadilla cada columna con un -

Soy un principiante en lo que respecta a SQLite, cualquier ayuda se agradece

+0

Posible duplicado: http://stackoverflow.com/q/3568779/2291 –

Respuesta

284

The || operator is "concatenate" - it joins together the two strings of its operands.

De http://www.sqlite.org/lang_expr.html

Para el relleno, la forma aparentemente tramposo I' Si lo usas es para comenzar con tu cadena objetivo, di '0000', concatenar '0000423', luego substr (resultado, -4, 4) para '0423'.

Actualización: Parece que no hay una implementación nativa de "lpad" o "RPAD" en SQLite, pero se puede seguir a lo largo (básicamente lo que he propuesto) aquí: http://verysimple.com/2010/01/12/sqlite-lpad-rpad-function/

-- the statement below is almost the same as 
-- select lpad(mycolumn,'0',10) from mytable 

select substr('0000000000' || mycolumn, -10, 10) from mytable 

-- the statement below is almost the same as 
-- select rpad(mycolumn,'0',10) from mytable 

select substr(mycolumn || '0000000000', 1, 10) from mytable 

Así es como Apariencia:

SELECT col1 || '-' || substr('00'||col2, -2, 2) || '-' || substr('0000'||col3, -4, 4) 

se produce

"A-01-0001" 
"A-01-0002" 
"A-12-0002" 
"C-13-0002" 
"B-11-0002" 
+3

Does || todavía funciona si una de las columnas es nula? – Andrew

+8

@Andrew: en general, cualquier operación escalar que implique NULL arrojará NULL. Sus requisitos pueden cumplirse usando 'COALESCE (nullable_field, '') || COALESCE (another_nullable_field, '') '. – MatBailie

25

SQLite has a printf function que hace exactamente eso:

SELECT printf('%s-%.2d-%.4d', col1, col2, col3) FROM mytable 
+1

Error de consulta: no existe tal función: printf No se puede ejecutar la instrucción seleccione printf ('% s.% S', id, url) del límite mytable 7. Mi versión es 3.8.2 2014-12-06. Qué versión estás usando? –

+3

@BerryTsakala: 3.8.6 – ybungalobill

11

Sólo una línea más para la respuesta @tofutim ... si quieres nombre del campo personalizado para la fila concatenado ...

SELECT 
    (
    col1 || '-' || SUBSTR('00' || col2, -2, 2) | '-' || SUBSTR('0000' || col3, -4, 4) 
) AS my_column 
FROM 
    mytable; 

probado en SQLite 3.8.8.3, gracias!

Cuestiones relacionadas