J'ai un champ varchar qui est un code de lettres et est incrémenté automatiquement (manuellement), donc après A est B jusqu'à ce jusqu'à après z devenue AA et ainsi de suite.
Mon problème est quand je frappe Aa et j'essaie de sélectionner Max de ce champ: P>
SELECT MAX(letter) from jobs
4 Réponses :
Cela peut aider? Triez-les d'abord par la longueur, puis par lettre.
SELECT letter FROM jobs ORDER BY LENGTH(letter) DESC, letter DESC LIMIT 0, 1
Cela va toujours donner z pour l'entrée d'entrée [A..Z, AA].
Désolé, édité après avoir réalisé que j'étais stupide pour ne pas lire correctement.
Essayez celui-ci. Cela le forcera à peser des chaînes plus longues comme étant plus élevées que les chaînes plus courtes: EDIT: Yup, oublié de trier Desc pour obtenir le maximum ... p> p> p>
+1, c'est mieux que ma solution de sous-requête. Une chose à garder à l'esprit si vous souhaitez éviter que le tueur de performance des fonctions par ligne consiste à avoir une autre colonne (indexée) appelée lettre_len qui est renseignée par un déclencheur d'insertion / mise à jour, puis utilisez-le dans la clause de l'ordre. Cela amortira le coût du calcul (fait lorsque les données changent) sur toutes les lectures, ce qui accélère sensiblement les requêtes.
Puisque vous êtes après le champ max du le plus long em>, je commencerais avec quelque chose comme ce qui suit. Je ne sais pas si la syntaxe est correcte. Fondamentalement, vous devez ignorer toutes les valeurs de colonne les plus longues. select max(letter) from jobs
where len(letter) = (
select max(len(letter)) from jobs
)
Avez-vous une longueur maximale pour votre champ? Si tel est le cas, pouvez-vous aussi égaler la justification des données dans ce domaine? Les chances sont que les réponses sont (1) empiriquement «oui», et 5 pourrait être une longueur supérieure, et (2) pas vraiment. Cependant, avez-vous pu dire «oui» aux deux, alors vous pourrez utiliser ceci (où les cases sont des blancs): P>
De manière réaliste, cela ne va probablement pas être ok pour vous, et donc cela ne va pas aider. P>