Cette situation peut se produire si votre invoice_number
est stocké sous forme de colonne de texte, par ex. varchar(10)
. Dans ce cas, selon l'ordre alphabétique, 9 sera la valeur maximale.
Idéalement, vous devriez stocker les valeurs sur lesquelles vous souhaitez effectuer des opérations numériques en tant que types de données numériques, par ex. int
. Cependant, si pour une raison quelconque vous ne pouvez pas modifier le type de données de la colonne, vous pouvez essayer de convertir la colonne avant d'appliquer MAX
, comme ceci :
select max (convert(invoice_number, signed integer)) as maxinv from invoice
REMARQUE :Je mentionne spécifiquement "les valeurs sur lesquelles vous souhaitez effectuer des opérations numériques" car il y a des cas où le texte saisi est entièrement numérique, comme des numéros de téléphone ou peut-être des numéros de carte de crédit, mais il n'y a aucun scénario dans lequel vous voudriez ajouter 2 numéros de téléphone, ou prendre la racine carrée d'un numéro de carte de crédit. Ces valeurs doivent être stockées sous forme de texte.