Sql Server et les 0 en début de chiffres
Résolu
lys44
Messages postés
57
Date d'inscription
Statut
Membre
Dernière intervention
-
varfendell Messages postés 3259 Date d'inscription Statut Membre Dernière intervention -
varfendell Messages postés 3259 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis actuellement en train de prog une appli en VB.net permettant le calcul de rentabilité d'un dossier.
Afin que les salariés ne soient pas perturbés lors de l'utilisation de l'appli je me suis basée sur le "code" leur permettant d'identifier un dossier.
Les dossiers sont identifiés comme suit : cA1004027 ou dX0810266
c ou d correspond au type du dossier (concours, dossier)
La lettre majuscule correspond à la filiale ayant le dossier/concours.
08 ou 10 correspond à l'année.
04 ou 02 correspond au mois.
Et 027 ou 266 correspond au numéro de dossier dans l'année.
Mon hic, c'est que même si je rentre en dur les chiffres, SQL server ne prend pas en compte le 0.
Hors il m'est demandé de garder le 0 car cela permet d'identifier de manière concise l'année, le mois ou le numéro du dossier dans l'année.
De plus le 0 me permettra d'avoir une chaîne de caractères (car je la concatène à l'écran afin que cela ait le rendu attendu par l'utilisateur) avec un nombre de caractères fixe, et étant donné que je dois découper la chaine de caractères à un moment, rendra le découpage beaucoup + simple!!
S'il vous faut d'autres infos, no problem!!
Merci d'avance!
Je suis actuellement en train de prog une appli en VB.net permettant le calcul de rentabilité d'un dossier.
Afin que les salariés ne soient pas perturbés lors de l'utilisation de l'appli je me suis basée sur le "code" leur permettant d'identifier un dossier.
Les dossiers sont identifiés comme suit : cA1004027 ou dX0810266
c ou d correspond au type du dossier (concours, dossier)
La lettre majuscule correspond à la filiale ayant le dossier/concours.
08 ou 10 correspond à l'année.
04 ou 02 correspond au mois.
Et 027 ou 266 correspond au numéro de dossier dans l'année.
Mon hic, c'est que même si je rentre en dur les chiffres, SQL server ne prend pas en compte le 0.
Hors il m'est demandé de garder le 0 car cela permet d'identifier de manière concise l'année, le mois ou le numéro du dossier dans l'année.
De plus le 0 me permettra d'avoir une chaîne de caractères (car je la concatène à l'écran afin que cela ait le rendu attendu par l'utilisateur) avec un nombre de caractères fixe, et étant donné que je dois découper la chaine de caractères à un moment, rendra le découpage beaucoup + simple!!
S'il vous faut d'autres infos, no problem!!
Merci d'avance!
A voir également:
- Sql ajouter 0 devant nombre
- Afficher le 0 devant un nombre dans excel - Guide
- Nombre de jours entre deux dates excel - Guide
- Ajouter signature word - Guide
- Si #n/a alors 0 - Forum Bureautique
- Remettre a 0 un pc - Guide
2 réponses
Bonjour,
essaye de declarer l'année, le mois et ne numéro du dossier comme si c'était des chaines de caracteres. Je ne pense pas que tu fera des opérations dessus. Ainsi les 0 en debut seront gardé
essaye de declarer l'année, le mois et ne numéro du dossier comme si c'était des chaines de caracteres. Je ne pense pas que tu fera des opérations dessus. Ainsi les 0 en debut seront gardé
Pour l'année et le mois effectivement je n'ai pas de calculs dessus.
Cependant pour le numéro du dossier dans l'année j'ai un calcul dessus.
(Voir ci-dessous)
Donc pour le num_seq je n'ai pas vraiment le choix...
Afin qu'à l'écran du user cela apparaisse comme il le souhaite j'utilise cette requête :
SELECT identifiant + lettre + CAST(annee varchar(2)) + CAST(mois varchar(2)) + CAST(num_seq varchar(3)) from DOSSIER
Il y a-t-il moyen de s'en servir pour résoudre mon pb?
Cependant pour le numéro du dossier dans l'année j'ai un calcul dessus.
(Voir ci-dessous)
'Verification qu il existe deja des dossiers pour l annee concernee. Dim myCommand As SqlCommand Dim ra As Integer connexionSQL.Open() myCommand = New SqlCommand("SELECT COUNT(num) FROM DOSSIER WHERE annee = " & CB_annee_dos.SelectedItem, connexionSQL) ra = myCommand.ExecuteScalar() '--------- permet de compter le nombre de resultats par raport a l exe de la requete sql If ra = 0 Then 'S il n existe pas de dossier pour cette annee la, il faut faire une RAZ num_seq = 001 Else 'Sinon on prend le dernier num enregistre pour cette annee la et on l'incremente de 1 'Recherche du dernier numero sequentiel da = New SqlDataAdapter("SELECT max(num_seq) from DOSSIER WHERE annee =" & CB_annee_dos.SelectedItem, connexionSQL) ds = New DataSet da.Fill(ds, "mytable") dt = ds.Tables("mytable") For nb As Integer = 0 To dt.Rows.Count - 1 dr = dt.Rows(nb) num_seq = dr(0) + 1 Next nb End If
Donc pour le num_seq je n'ai pas vraiment le choix...
Afin qu'à l'écran du user cela apparaisse comme il le souhaite j'utilise cette requête :
SELECT identifiant + lettre + CAST(annee varchar(2)) + CAST(mois varchar(2)) + CAST(num_seq varchar(3)) from DOSSIER
Il y a-t-il moyen de s'en servir pour résoudre mon pb?
Toujours en ma basant sur mon idée, tu peut bouriner un peu:
Tu enregistre bien ton numéro de dossier comme une chaine de caractere, et pour les calcul tu la cast en integrer.
Je ne connais pas le langage VB, mais dans tout les autre langage que je connais cela existe, donc y a pas de raison^^
aisi le 0 du debut ne disparaitra que pour les calcul que tu effectus dessus, et tu le garde à l'affichage grace a ta chaine de caractere ;)
Tu enregistre bien ton numéro de dossier comme une chaine de caractere, et pour les calcul tu la cast en integrer.
Je ne connais pas le langage VB, mais dans tout les autre langage que je connais cela existe, donc y a pas de raison^^
aisi le 0 du debut ne disparaitra que pour les calcul que tu effectus dessus, et tu le garde à l'affichage grace a ta chaine de caractere ;)