SQLite fonction pour formater les nombres avec des zéros à gauche?
J'ai une base de données SQLite qui devra contenir des produits. Ces produits ont un format fixe composite numéro de produit, composé de la catégorie, le groupe et le numéro de produit (cccccc.gg.ppp). Chaque fois qu'un nouveau produit est inséré, le nouveau numéro de produit devrait être construit à l'aide de la catégorie et les numéros de groupe, suivi par le plus grand nombre de produit dans ce groupe incrémenté de un.
À cette fin, je pensais le stockage de tous les trois chiffres dans des champs distincts, et d'utiliser une vue à assembler dynamiquement le numéro de produit. Pour que cela fonctionne, j'aurais besoin d'ajouter des zéros à gauche, depuis le numéro de produit format est fixe.
Cependant, je n'arrive pas à trouver un construit-dans SQLite fonction qui serait de les laisser me faire cela... 🙁
Je préfère ne pas écrire une fonction personnalisée, car nous pourrions avoir à partager la base de données avec d'autres développeurs, pour leur lire des données à partir d'; et je n'ai aucune idée de ce que plate-forme ou de la langue qu'ils vont utiliser.
Cela peut-il être fait? Ou nous faudra trouver une autre solution?
- En plus de la réponse directe à votre question de @9000, réfléchir pour savoir si la catégorie, le groupe, et les numéros de produit ne devrait pas être stockés en tant que texte.
- Pourquoi devraient-ils être stockés en tant que texte vs comme chiffres? (En particulier le numéro de produit, car j'ai besoin d'obtenir sa valeur maximale + 1 pour le prochain numéro de produit).
- Texte préserve les zéros à gauche. Il y a quelque chose à dire pour le stockage "000123" lors de votre exigence est de stocker de l' "000123".
- ce n'est pas la question. J'ai besoin d'obtenir la valeur suivante; ce qui signifie avoir à disposition en nombre, et de conversion que pour un zéro de préfixe de la chaîne. Comment elle est stockée est une question séparée entièrement.
- Vous pouvez convertir des chaînes en nombres de faire de l'arithmétique sur eux. Voir sqlite.org/lang_expr.html#castexpr
Vous devez vous connecter pour publier un commentaire.
Ceci peut être accompli avec un peu de magie à l'aide de la concaténation de chaîne et le
substr
fonction. Longue histoire courte, voici ce que vous voulez:Une explication de la façon suivante.
D'abord, sachez que SQLite est l'opérateur de concaténation de chaîne est
||
.Nous allons commencer par prendre une chaîne de caractères qui est aussi long que la valeur que nous voulons revenir. Par exemple, si vous souhaitez renvoyer un nombre qui est toujours de 10 caractères de long et il est être de gauche rembourré avec
0
s si elle est plus courte, puis démarrer avec une chaîne de dix0
s. Pour cela, nous allons concaténer le numéro que vous souhaitez retourner. Dans notre exemple, c'est - '1234'. Jusqu'à présent, nous avons la partie qui ressemble à ceci:'0000000000'||'1234'
Ensuite, passer tout ça dans le
substr
fonction. Selon la documentation, voici comment lesubstr
fonction:Donc, si vous voulez la chaîne de 10 caractères de long, passer -10 comme le paramètre Y (pour commencer à compter à partir de la droite, de 10 caractères dans le dos) et passer à 10, car le paramètre Z (de 10 caractères au total).
select substr('0000000000'||'1234', length('0000000000'||'1234')-9, 10)
œuvres; remplacer'1234'
avec votre numéro de produit, longueur <= 10.Je sais que c'est une vieille question, mais la suivante est plus simple:
substr
ne nécessite pas de longueur si vous êtes à la sélection à la fin.Depuis 3.8.3 (2014), Vous pouvez utiliser printf comme:
Changer les 4 par le nombre de chiffres que vous avez besoin. Ce serait de retour 0001 pour product_number 1.
printf('%04d', product_number)
. Belle réponse, cependant.