2017-02-21 5 views
1

Ich möchte die letzten 10 Zahlen aus den Feldern einer Spalte extrahieren, so verwende ich Teilzeichenfolge in Funktion in der Struktur gebaut. Aber wenn der Feldwert kleiner als der definierte Wert ist (< 10). Es gibt ein leeres Feld zurück. Eingabe: orig_number 140976526012 140980434512 1740016 1740016 17250460171 Ich verwende diesen Code. select *,length(orig_number) as leng,substr(orig_number,-10) as subbstring from num_table sort by orig_number; Ausgang ist:substring() gibt leer im Bienenstock

orig_number leng subbstring 140976526012 12 0976526012 140980434512 12 140980434512 1740016 7
1740016 7
17250460171 11 725046017

Antwort

1

von dem Ende der Zeile 10 Zeichen Abrufen up

select orig_number 
     ,regexp_extract (orig_number,'.{1,10}$',0) as orig_number_suffix 

from num_table 
; 

+--------------+--------------------+ 
| orig_number | orig_number_suffix | 
+--------------+--------------------+ 
| 140976526012 |   0976526012 | 
| 140980434512 |   0980434512 | 
|  1740016 |   1740016 | 
|  1740016 |   1740016 | 
| 17250460171 |   7250460171 | 
+--------------+--------------------+ 

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html


Und hier ist, warum Sie eine leere erhalten.
Scheint mir wie ein schlechtes Design der substr Funktion.

UDFSubstr.java

private int[] makeIndex(int pos, int len, int inputLen) { 
    if ((Math.abs(pos) > inputLen)) { 
     return null; 
    } 

... 
+1

@TobySpeight - ich habe die Antwort bearbeitet. Wie gesagt - ** (1) ** Der Umfang einer Antwort unterliegt den Beschränkungen der Zeit, der Verfügbarkeit des Internets, der Verfügbarkeit des Computers und der Qualität/des Interesses des Posts selbst. Diese spezifische Antwort wurde von meinem Handy gegeben, während ich auf einen Aufzug wartete. ** (2) ** Bitte beachten Sie, dass SO-Antwort nicht als Tutorial, sondern zur Lösung eines bestimmten Problems gedacht ist. ** (3) ** Ich lade Sie ein, einige meiner anderen Antworten zu überprüfen –

+0

Überprüfen Sie die aktualisierte Antwort –