167 votes

Formater des nombres en ajoutant des zéros dans SQL Server

Nous avons une vieille table SQL qui a été utilisé par SQL Server 2000 pour près de 10 ans.

En cela, notre badge de l'employé nombres sont stockés en tant que char(6) de 000001 de 999999.

Je suis en train d'écrire une application web maintenant, et j'ai besoin de stocker de l'employé numéro de badge.

Dans ma nouvelle table, j'ai pu prendre la coupe courte et la copie de l'ancienne table, mais je suis l'espoir pour un meilleur transfert de données de petite taille, etc, par tout simplement de stocker l' int des valeurs de 1 de 999999.

En C#, je peut rapidement mettre en forme un int de la valeur pour le numéro de badge à l'aide de

public static string GetBadgeString(int badgeNum) {
  return string.Format("{0:000000}", badgeNum);
  // alternate
  // return string.Format("{0:d6}", badgeNum);
}

Comment puis-je modifier cette simple requête SQL pour le format de la valeur retournée?

SELECT EmployeeID
FROM dbo.RequestItems
WHERE ID=0

Si EmployeeID est 7135, cette requête doit renvoyer 007135.

225voto

Vince Pergolizzi Points 1453

Modifiez le nombre 6 en fonction de votre longueur totale requise:

 SELECT REPLICATE('0',6-LEN(EmployeeId)) + EmployeeId
 

Et le code pour supprimer ces 0 et récupérer le nombre «réel»:

 SELECT RIGHT(EmployeeId,(LEN(EmployeeId) - PATINDEX('%[^0]%',EmployeeId)) + 1)
 

210voto

EdMorte Points 1

Utilisez simplement la fonction FORMAT (fonctionne sur SQL Server 2012 ou une version plus récente):

 SELECT FORMAT(EmployeeID, '000000')
FROM dbo.RequestItems
WHERE ID=0 
 

Référence: http://msdn.microsoft.com/en-us/library/hh213505.aspx

37voto

Steve Points 96477

Vous pouvez modifier votre procédure de cette façon

SELECT Right('000000' + CONVERT(NVARCHAR, EmployeeID), 6) AS EmpIDText, 
       EmployeeID
FROM dbo.RequestItems 
WHERE ID=0 

Toutefois, cela suppose que votre EmployeeID est une valeur numérique, et ce code pour modifier le résultat d'une chaîne de caractères, je suggère d'ajouter à nouveau l'original de la valeur numérique

MODIFIER bien sûr, je n'ai pas lu attentivement la question ci-dessus. Il est dit que le champ est un char(6) donc Employé n'est pas une valeur numérique. Bien que cette réponse a toujours une valeur en soi, ce n'est pas la bonne réponse à la question ci-dessus.

28voto

JeffSahol Points 541

Je détestais avoir à convertir le int, et cela semble beaucoup plus simple. Peut-être même mieux fonctionner puisqu'il n'y a qu'une conversion de chaîne et une simple addition.

sélectionnez DROIT (1000000 + EmployeeId, 6) ...

Assurez-vous simplement que le "1000000" contient au moins autant de zéros que la taille requise.

6voto

Jamiec Points 35773

Une autre façon, juste pour être complet.

 DECLARE @empNumber INT = 7123
SELECT STUFF('000000', 6-LEN(@empNumber)+1, LEN(@empNumber), @empNumber)
 

Ou, selon votre requête

 SELECT STUFF('000000', 6-LEN(EmployeeID)+1, LEN(EmployeeID), EmployeeID) 
         AS EmployeeCode
FROM dbo.RequestItems
WHERE ID=0
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X