Comment trouver le MAX() de la valeur de la colonne de caractères?
Nous avons hérité de la table où l'une des colonnes de la partie de la clé composite a été manuellement rempli avec des valeurs:
code
------
'001'
'002'
'099'
etc.
Maintenant, nous avons demande de fonctionnalité dans lequel nous devons savoir, MAX(le code) afin de donner à l'utilisateur prochaine valeur possible, par exemple dans les cas ci-dessus suivant la valeur est '100'.
Nous avons essayé d'expérimenter avec cela, mais nous ne pouvons toujours pas trouver aucune explication raisonnable comment DB2 moteur calcule que
MAX('001', '099', '576') est '576'
MAX('099', '99', 'www') est '99', et ainsi de suite.
Toute aide ou suggestion serait bien apprécié!
Vous devez vous connecter pour publier un commentaire.
Vous avez déjà la réponse à obtenir le maximum de valeur numérique, mais pour répondre à l'autre partie en ce qui concerne "www','099','99'.
L'as/400 utilise EBCDIC pour stocker des valeurs, ce qui est différent ASCII de plusieurs façons, le plus important pour vous est que les caractères Alpha viennent avant les numéros, qui est à l'opposé de l'Ascii.
Sur Max (), votre 3 chaînes seront triés et les plus EBCDIC valeur utilisée afin
Comme vous pouvez le voir votre '99' string est vraiment '99' donc, c'est plus élevée que celle avec le zéro.
Convertir en int avant d'appliquer max()
Pour le numérique maximum -- filtrer les valeurs non numériques et de la fonte numérique pour l'agrégation:
De Référence SQL: TRADUIRE
Et l'explication raisonnable:
De Référence SQL: MAX
Ce max bien dans votre définition de type, lorsque vous voulez faire max sur des valeurs entières puis convertir des valeurs en entier avant d'appeler MAX, mais je vous vois de mélange max, avec de la ficelle " www " comment vous imaginez que cela fonctionne?
Filtre entier uniquement les valeurs, les convertir en int et d'appel max. Ce n'est pas la bonne solution, mais en regardant votre problème, je pense que c'est assez.