J'essaie de trier un champ de chaîne en ordre décroissant.
Règles de tri: p>
Échantillon Source Data: P>
with firmware_name as ( select '3.9P2S1' as firmware from dual union all select '4.0P5S1' as firmware from dual union all select '3.10P4S1' as firmware from dual union all select '3.11P2S3' as firmware from dual union all select '3.7P2S1' as firmware from dual union all select '3.2P10S1' as firmware from dual union all select '4.0P4S1' as firmware from dual union all select '3.5P2S1' as firmware from dual union all select '4.0P16S1' as firmware from dual union all select '3.12P6S1' as firmware from dual union all select '3.12P10S2' as firmware from dual union all select '3.14P3S2' as firmware from dual) select * from firmware_name order by to_number(regexp_substr(firmware, '^\d+')) desc nulls last, to_number(regexp_substr(firmware, '^\d+\.(\d+)', 1, 1, null, 1)) desc, regexp_replace(firmware, '\d+\.\d+') desc;
3 Réponses :
Qu'en est-il de cela:
order by to_number(regexp_replace(firmware, 'P.+$')) desc nulls last, to_number(regexp_replace(firmware, '^.+P(\d+)S.+$', '\1')) desc, to_number(regexp_replace(firmware, '^.+S')) desc
Merci beaucoup pour votre réponse, cela fonctionne parfaitement! Appréciez-le.
J'utiliserais La première expression capture les caractères au début de la chaîne jusqu'à un regexp_substr () code>:
'p' code > est rencontré (exclu). La seconde capture tout après
'P' code> jusqu'à ce qu'un
' code> est rempli. L'expression finale capture tout après le dernier
' code>. P> p>
Merci d'avoir pris le temps de répondre à ma question, j'apprécie vraiment ... cela a été travaillé pour la plupart, mais lors de la vérification, les valeurs situées dans le bas 3.12P10SS2 et 3.12P6S1 n'ont pas été triés correctement. 3.12P6S1 a été trié plus haut puis 3.12P10S2.
@Kavinpalaniswamy: corrigé.
Vous pouvez utiliser ce qui suit, où vous utilisez la même regex, mais un numéro d'occurrence différent:
Merci beaucoup pour votre réponse. Cela fonctionne parfaitement, je l'ai testé avec une valeur multiple et fonctionne parfaitement. C'est bien. Merci encore