J'ai une chaîne de 3 caractères maximum lorsqu'elle est créée pour la première fois dans SQL Server 2008 R2.
Je voudrais le remplir avec des zéros en tête, donc si sa valeur d'origine était '1' alors la nouvelle valeur serait '001'. Ou si sa valeur d'origine était '23', la nouvelle valeur est '023'. Ou si sa valeur d'origine est «124», la nouvelle valeur est identique à la valeur d'origine.
J'utilise SQL Server 2008 R2. Comment pourrais-je faire cela en utilisant T-SQL?
sql-server
tsql
Sunil
la source
la source
Réponses:
Si le champ est déjà une chaîne, cela fonctionnera
Si vous souhaitez que les valeurs nulles s'affichent en tant que '000'
Ce pourrait être un entier - alors vous voudriez
la source
Bien que la question soit pour SQL Server 2008 R2, au cas où quelqu'un lirait ceci avec la version 2012 et supérieure, depuis, cela est devenu beaucoup plus facile grâce à l'utilisation de FORMAT .
Vous pouvez soit passer une chaîne de format numérique standard ou une chaîne de format numérique personnalisée comme argument de format (merci Vadim Ovchinnikov pour cet indice).
Pour cette question par exemple un code comme
les sorties
la source
La méthode sûre:
Cela a l'avantage de renvoyer la chaîne
'***'
pour n <0 ou n> 999, ce qui est un indicateur agréable et évident d'une entrée hors limites. Les autres méthodes répertoriées ici échoueront en silence en tronquant l'entrée à une sous-chaîne à 3 caractères.la source
SELECT REPLACE(STR('1',3),' ','0')
Pauses:SELECT REPLACE(STR('1A',3),' ','0')
. Cela m'a brûlé aujourd'hui lorsqu'un utilisateur a entré une lettre dans la chaîne d'entrée et que je n'ai pas testé ce cas.Voici une technique plus générale pour le rembourrage gauche à n'importe quelle largeur souhaitée:
Cependant, si vous avez affaire à des valeurs négatives et à un remplissage avec des zéros non significatifs, ni cela, ni aucune autre technique suggérée ne fonctionnera. Vous obtiendrez quelque chose qui ressemble à ceci:
[Probablement pas ce que vous vouliez]
Donc ... vous devrez sauter à travers quelques cerceaux supplémentaires Voici une approche qui formatera correctement les nombres négatifs:
Il convient de noter que les
convert()
appels doivent spécifier une[n]varchar
longueur suffisante pour contenir le résultat converti avec troncature.la source
Voici une variante de la réponse de Hogan que j'utilise dans SQL Server Express 2012:
Au lieu de vous inquiéter si le champ est une chaîne ou non, je viens de le
CONCAT
faire, car il produira de toute façon une chaîne. De plus, si le champ peut être unNULL
, l'utilisationISNULL
peut être nécessaire pour éviter que la fonction n'obtienne desNULL
résultats.la source
J'ai toujours trouvé la méthode suivante très utile.
la source
Utilisez cette fonction qui convient à toutes les situations.
Exemple de sortie
la source
DECLARE @NumStr VARCHAR(250) = '2016'; SELECT REPLICATE('0', 12 - LEN(@NumStr)) + @NumStr;
qui retourne le premier exemple de Salar ci-dessus. Merci Salar.DECLARE @NumStr VARCHAR(250) = '2016'; SELECT REPLICATE('0', 10 - LEN(@NumStr)) + @NumStr;
qui renvoie0000002016
dans le premier exemple ci-dessus.Pour ceux qui souhaitent mettre à jour leurs données existantes, voici la requête:
la source
Pour les entiers, vous pouvez utiliser la conversion implicite de int en varchar:
la source
Je connais son ancien ticket je pensais juste le partager.
J'ai trouvé ce code à la recherche d'une solution. Je ne sais pas si cela fonctionne sur toutes les versions de MSSQL, j'ai MSSQL 2016.
renvoie "0023" Le 4 dans la fonction STR est la longueur totale, y compris la valeur. Les exemples 4, 23 et 123 auront tous 4 en STR et la quantité correcte de zéros sera ajoutée. Vous pouvez l'augmenter ou le diminuer. Pas besoin d'avoir la longueur du 23.
Edit: je vois que c'est la même chose que @Anon post.
la source
Essayez ceci avec une longueur fixe.
la source
J'ai eu un problème similaire avec la colonne entière en entrée lorsque j'avais besoin d'une sortie varchar (ou chaîne) de taille fixe. Par exemple, 1 à «01», 12 à «12». Ce code fonctionne:
Si l'entrée est également une colonne de varchar, vous pouvez éviter la partie de coulée.
la source
Pour une approche plus dynamique, essayez ceci.
la source
A écrit cela parce que j'avais des exigences pour une longueur spécifique (9). Remplit la gauche avec @pattern UNIQUEMENT lorsque l'entrée doit être complétée. Doit toujours renvoyer la longueur définie dans @pattern.
Renvoie 1234input
la source
C'est simple
Comme:
la source
Je suis venu ici spécifiquement pour trouver comment convertir mon décalage horaire en une chaîne de fuseau horaire pour convertir les dates en DATETIMEOFFSET dans SQL Server 2008. Brut, mais nécessaire.
J'ai donc besoin d'une méthode capable de gérer les nombres négatifs et positifs, en les formatant en deux caractères avec un zéro en tête si nécessaire. La réponse Anons m'a rapproché, mais les valeurs de fuseau horaire négatives sortiraient
0-5
plutôt que celles requises-05
Donc, avec un petit ajustement sur sa réponse, cela fonctionne pour toutes les conversions d'heure de fuseau horaire
la source
J'ai créé cette fonction qui s'adresse à bigint et un zéro à gauche ou un autre caractère unique (max 20 caractères retournés) et permet une longueur des résultats inférieure à la longueur du numéro d'entrée:
la source