1
votes

Comment supprimer les zéros non significatifs de la colonne de chaîne dans Hive / Impala

Si le montant est "0012304 $", je veux un résultat comme "12304 $" et si le montant est "0000000 $" alors "0 $"

Quand j'utilise regexp_replace (amount, '^? 0', '') , cela remplace tous les zéros de la colonne et donne un résultat de 1234 $ au lieu de 12304 $.

Je souhaite conserver "$" devant le montant après avoir supprimé tous les zéros non significatifs.


3 commentaires

Bienvenue! à SO, veuillez rechercher votre question avant de la poster ici si vous suivez les règles cela fera gagner du temps à tout le monde Voici le lien vers la réponse stackoverflow.com/questions/38146780/...


Copie possible de Supprimer les zéros non significatifs à l'aide de HiveQL


Je veux garder le symbole "$" devant le montant après avoir supprimé tous les zéros non significatifs.


3 Réponses :


0
votes

En fonction de la question liée (duplication possible), vous pouvez modifier la sélection pour obtenir l'effet souhaité. Ici, nous faisons correspondre le '$' au début de la chaîne, suivi de n'importe quel nombre de 0, supprimons-le et rajoutons-le.

SELECT some_string,
   REGEXP_REPLACE(some_string, "^\\$0+", '$') stripped_string
FROM db.tbl

* modifié pour ajouter une barre oblique supplémentaire par commentaire.


4 commentaires

Merci beaucoup! mais cela a fonctionné après avoir ajouté un autre '\' dans "^ \\ $ 0+"


Heureux que vous ayez compris!


Merci! mais le défi est toujours lorsque le montant est "000000 $", alors le voudrait comme "0 $", si j'utilise la méthode ci-dessus, il n'affiche que "$" dans la colonne au lieu de "0 $"


IF (stripped_string = '$', '$ 0', stripped_string) Cela dépasse cependant ma compréhension à ce stade.



0
votes

Vous pouvez essayer le code ci-dessous:

select regexp_replace(substring('$0012304',2),'^0+?','$') from hive_table;

Première sous-chaîne, puis remplacez-la par $.


0 commentaires

0
votes

Supprimer le signe dollar s'il existe, convertir en double (cela supprimera les zéros non significatifs), concaténer avec le signe dollar:

$1.0

Résultat:

select concat('$',cast(regexp_replace('$000001','^\\$','') as double))

Utilisez bigint ou int au lieu de double si les chiffres sont des entiers uniquement

Cette méthode fonctionnera si dollar le signe est absent et avec tous les zéros également.

Testez ici: http : //demo.gethue.com/hue/editor? editor = 291139


0 commentaires