J'ai besoin de convertir le champ de données int en nvarchar avec des zéros non significatifs
exemple:
1 conversion en '001'
867 convertir en '000867', etc.
THX.
Ceci est ma réponse 4 heures plus tard ...
J'ai testé ce script T-SQL et fonctionne très bien pour moi!
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED
SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED
J'ai créé cette fonction utilisateur
Code T-SQL:
CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) RETURNS nvarchar(20)
AS
BEGIN
-- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number
-- @intlen contains the string size to return
IF @intlen > 20
SET @intlen = 20
RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(20),@intVal))))
+ CONVERT(nvarchar(20),@intVal)
END
Exemple :
SÉLECTIONNEZ dbo.CIntToChar (867, 6) COMME COD_ID
PRODUCTION
000867
sql-server
stored-procedures
RicardoBalda
la source
la source
Réponses:
Essaye ça:
select right('00000' + cast(Your_Field as varchar(5)), 5)
Il obtiendra le résultat en 5 chiffres, ex: 00001, ...., 01234
la source
select right('00000' || cast(Your_Field as varchar(5)), 5)
Vous pouvez également utiliser la fonction FORMAT () introduite dans SQL Server 2012 . http://technet.microsoft.com/library/hh213505.aspx
la source
À utiliser
REPLICATE
pour ne pas avoir à coder en dur tous les zéros non significatifs:PRODUCTION:
la source
Pas à High-Jack cette question mais il faut noter que vous devez utiliser (N) VARCHAR au lieu de (N) CHAR type de données.
Au-dessus du segment, ne produira pas la réponse correcte de SQL 2005
Au-dessus du segment, produira la réponse souhaitée à partir de SQL 2005
Le varchar vous fournira la longueur de préfixe souhaitée à la volée. Où le type de données de longueur fixe nécessitera une désignation et des ajustements de longueur.
la source
J'aime utiliser
cela me donne
la source
RIGHT(1000+Number, 3)
- agréable, court et rapideLe type de données "int" ne peut pas comporter plus de 10 chiffres, de plus la fonction "Len ()" fonctionne sur les ints, il n'est donc pas nécessaire de convertir l'int en une chaîne avant d'appeler la fonction len ().
Enfin, vous ne prenez pas en compte le cas où la taille de votre int> le nombre total de chiffres que vous souhaitez compléter (@intLen).
Par conséquent, une solution plus concise / correcte est:
la source
Pas très élégant, mais j'ajoute une valeur définie avec le même nombre de zéros non significatifs que je souhaite au numérique que je veux convertir et j'utilise la fonction DROITE.
Exemple:
la source
Solution en une seule ligne (en soi ) pour SQL Server 2008 ou supérieur:
La multiplication par
SIGN
expression équivaut àMAX(0, @DesiredLenght-LEN([Column]))
. Le problème est queMAX()
n'accepte qu'un seul argument ...la source
J'ai trouvé un bon article ici :
la source
BTW si c'est une colonne int, alors il ne conservera toujours pas les zéros Faites-le simplement dans la couche de présentation ou si vous en avez vraiment besoin dans le SELECT
la source
J'ai eu le même problème, c'est ainsi que j'ai résolu ... Simple et élégant. Le "4" est la longueur de la chaîne, quelle que soit la longueur de l'entier passé, elle sera complétée par des zéros jusqu'à "4".
la source
Dans mon cas, je voulais que mon champ ait des 0 en tête dans le champ de 10 caractères (NVARCHAR (10)). Le fichier source n'a pas les 0 principaux nécessaires pour ensuite se joindre à une autre table. Est-ce simplement dû au fait d'être sur SQL Server 2008R2:
Set Field = right (('0000000000' + [Field]), 10) (Impossible d'utiliser Format () car il s'agit d'avant SQL2012)
Effectué cela par rapport aux données existantes. Ainsi, de cette façon, 1 ou 987654321 remplira toujours les 10 espaces avec des 0 en tête.
Comme les nouvelles données sont importées et ensuite vidées dans la table via une base de données Access, je peux utiliser Format ([Field], "0000000000") lors de l'ajout d'Access à la table du serveur SQL pour tous les nouveaux enregistrements.
la source
- Sans le 'RTRIM', la valeur renvoyée est
3__
!!!- Sans le 'RTRIM', la valeur renvoyée est
867___
!!!la source
L'utilisation
RIGHT
est une bonne option, mais vous pouvez également effectuer les opérations suivantes:où
N
est le nombre total de chiffres que vous souhaitez afficher. Donc, pour une valeur à 3 chiffres avec des zéros non significatifs (N = 3
):ou alternativement
Ce que cela fait, c'est ajouter la valeur souhaitée à une puissance de 10 suffisamment grande pour générer suffisamment de zéros non significatifs, puis couper le premier 1.
L'avantage de cette technique est que le résultat sera toujours de la même longueur, permettant l'utilisation de à la
SUBSTRING
place deRIGHT
, qui n'est pas disponible dans certains langages de requête (comme HQL).la source
Ce travail pour moi dans MYSQL:
Par exemple:
J'espère que cela aidera. Meilleures salutations
la source
Fonctionne dans SQLServer
Prendre plaisir
la source
Je me demandais si cela vous serait utile?
la source