2017-07-26 3 views
2

Eingabe: 1092-04-1Anhängen von Null mit HQL

Ich habe die obigen Daten als Zeichenfolge geladen. Ich muss Null vor, wenn die Länge der ersten Zeichenfolge weniger als 5 ist.

In ähnlicher Weise, wenn die Länge der zweiten Zeichenfolge ist weniger als 3 und wenn die Länge der dritten Zeichenfolge ist weniger als 2 mit HQL .

gewünschte Ausgabe: 01092-004-01

mit der unter Abfrage Versuchte und 0 ist nur für die erste Zeichenkette angehängt zu werden.

select concat(substr("00000",0,10-length(colname)),colname) from table name; 

Ausgabe: 01092-04-1.

Bitte schlagen Sie eine Lösung vor. TIA.

Antwort

3
select concat_ws('-', 
       lpad(your_col_splitted[0],5,'0'), 
       lpad(your_col_splitted[1],3,'0'), 
       lpad(your_col_splitted[2],2,'0') 
       ) 
from(    
select split('1092-04-1','-') as your_col_splitted 
)s; 

OK 
01092-004-01 
Time taken: 0.05 seconds, Fetched: 1 row(s)  

Ersetzen '1092.04.01' mit Ihrer Spalte.

+0

'concat_ws' wäre sauberer –

+0

Danke, verbesserte Antwort – leftjoin

0
select printf('%05d-%03d-%02d',x[0],x[1],x[2]) 

from (select split('1092-04-1','-') as x) t 
;