Come concatenare le stringhe con imbottitura in sqlite


Risposte:


383

L' ||operatore è "concatenato" - unisce le due stringhe dei suoi operandi.

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

Per il padding, il modo apparentemente imbroglione che ho usato è iniziare con la tua stringa target, dire '0000', concatenare '0000423', quindi substr (risultato, -4, 4) per '0423'.

Aggiornamento: sembra che non ci sia implementazione nativa di "lpad" o "rpad" in SQLite, ma puoi seguire (sostanzialmente quello che ho proposto) qui: http://verysimple.com/2010/01/12/sqlite-lpad -rpad funzione /

-- 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

Ecco come appare:

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

cede

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

9
@Andrew - In generale, qualsiasi operazione scalare che coinvolge NULL genererà NULL. I tuoi requisiti possono essere soddisfatti utilizzando COALESCE(nullable_field, '') || COALESCE(another_nullable_field, '').
MatBailie,

37

SQLite ha una printffunzione che fa esattamente questo:

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

1
Errore query: nessuna di queste funzioni: printf Impossibile eseguire l'istruzione select printf ('% s.% S', id, url) dal limite di mytable 7. La mia versione è 3.8.2 2014-12-06. Quale versione stai usando?
Berry Tsakala,

5
@BerryTsakala: 3.8.6
Yakov Galka

1
3.8.3 "E ci sono altri miglioramenti minori come l'aggiunta della funzione SQL printf ()."
Sandburg,

17

Solo un'altra riga per la risposta di @tofutim ... se si desidera un nome campo personalizzato per la riga concatenata ...

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

Testato su SQLite 3.8.8.3 , grazie!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.