Par rapport à dire:
REPLICATE(@padchar, @len - LEN(@str)) + @str
sql
sql-server
tsql
Cade Roux
la source
la source
Réponses:
Il s'agit simplement d'une utilisation inefficace de SQL, peu importe comment vous le faites.
peut-être quelque chose comme
où X est votre caractère de remplissage et @n est le nombre de caractères dans la chaîne résultante (en supposant que vous avez besoin du remplissage parce que vous avez affaire à une longueur fixe).
Mais comme je l'ai dit, vous devriez vraiment éviter de le faire dans votre base de données.
la source
RTRIM(@str)
si cela peut contenir des espaces de fin.Je sais que cela a été demandé à l'origine en 2008, mais de nouvelles fonctions ont été introduites avec SQL Server 2012. La fonction FORMAT simplifie bien le remplissage à gauche avec des zéros. Il effectuera également la conversion pour vous:
Mettre à jour:
Je voulais tester moi-même l'efficacité réelle de la fonction FORMAT. J'ai été assez surpris de constater que l'efficacité n'était pas très bonne par rapport à la réponse originale d' AlexCuse . Bien que je trouve la fonction FORMAT plus propre, elle n'est pas très efficace en termes de temps d'exécution. La table Tally que j'ai utilisée contient 64 000 enregistrements. Félicitations à Martin Smith pour avoir souligné l'efficacité du temps d'exécution.
Temps d'exécution SQL Server: temps CPU = 2157 ms, temps écoulé = 2696 ms.
Temps d'exécution de SQL Server:
la source
Plusieurs personnes en ont donné des versions:
soyez prudent avec cela car il tronquera vos données réelles si elles sont plus longues que n.
la source
la source
Peut-être un sur-tuer j'ai ces UDF à remplir à gauche et à droite
et à droite
la source
Je ne suis pas sûr que la méthode que vous donnez soit vraiment inefficace, mais une autre manière, tant qu'elle ne doit pas être flexible dans la longueur ou le caractère de remplissage, serait (en supposant que vous vouliez la remplir avec " 0 "à 10 caractères:
la source
probablement exagéré, j'utilise souvent cet UDF:
Pour que vous puissiez faire des choses comme:
la source
J'ai aimé la solution vnRocks, la voici sous la forme d'un udf
la source
c'est un moyen simple de remplir à gauche:
Où
x
est le numéro du pad ety
le caractère du pad.échantillon:
la source
1
devient001
.la source
Dans SQL Server 2005 et versions ultérieures, vous pouvez créer une fonction CLR pour ce faire.
la source
Que dis-tu de ça:
3 est le nombre de
zeros
padla source
J'espère que ça aidera quelqu'un.
la source
J'utilise celui-ci. Il vous permet de déterminer la longueur souhaitée pour le résultat ainsi qu'un caractère de remplissage par défaut s'il n'est pas fourni. Bien sûr, vous pouvez personnaliser la longueur de l'entrée et de la sortie pour les maximums que vous rencontrez.
Votre kilométrage peut varier. :-)
Joey Morgan
Programmeur / Analyste Principal I
WellPoint Medicaid Business Unit
la source
Voici ma solution, qui évite les chaînes tronquées et utilise du SQL simple. Merci à @AlexCuse , @Kevin et @Sklivvz , dont les solutions sont à la base de ce code.
la source
Je sais que cela n'ajoute pas grand-chose à la conversation à ce stade, mais j'exécute une procédure de génération de fichiers et ça va incroyablement lentement. J'ai utilisé la réplique et j'ai vu cette méthode de coupe et je me suis dit que j'essaierais.
Vous pouvez voir dans mon code où le commutateur entre les deux s'ajoute à la nouvelle variable @padding (et la limitation qui existe maintenant). J'ai exécuté ma procédure avec la fonction dans les deux états avec les mêmes résultats en temps d'exécution. Donc, au moins dans SQLServer2016, je ne vois aucune différence d'efficacité que d'autres ont trouvée.
Quoi qu'il en soit, voici mon UDF que j'ai écrit il y a des années, plus les changements d'aujourd'hui, qui sont à peu près les mêmes que les autres, sauf qu'il dispose d'une option de paramètre LEFT / RIGHT et d'une vérification des erreurs.
la source
J'ai une fonction qui lpad avec x décimales: CREATE FUNCTION [dbo]. [LPAD_DEC] (- Ajoutez les paramètres de la fonction ici @pad nvarchar (MAX), @string nvarchar (MAX), @length int, @dec int ) RETOURS nvarchar (max) AS BEGIN - Déclarez la variable de retour ici DECLARE @resp nvarchar (max)
FIN
la source
Pour fournir des valeurs numériques arrondies à deux décimales mais complétées à droite par des zéros si nécessaire, j'ai:
Si quelqu'un peut penser à une manière plus soignée, ce serait apprécié - ce qui précède semble maladroit .
Remarque : dans ce cas, j'utilise SQL Server pour envoyer des rapports par e-mail au format HTML et je souhaite donc formater les informations sans impliquer un outil supplémentaire pour analyser les données.
la source
Voici comment je garnirais normalement un varchar
la source