Necesito convertir int datafield a nvarchar con ceros a la izquierda
ejemplo:
1 convertir a '001'
867 convertir a '000867', etc.
Gracias.
Esta es mi respuesta 4 horas después ...
¡Probé este script T-SQL y funcionó bien para mí!
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
Creé esta función de usuario
Código 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
Ejemplo:
SELECCIONE dbo.CIntToChar (867, 6) COMO COD_ID
SALIDA
000867
sql-server
stored-procedures
RicardoBalda
fuente
fuente
Respuestas:
Prueba esto:
select right('00000' + cast(Your_Field as varchar(5)), 5)
Obtendrá el resultado en 5 dígitos, por ejemplo: 00001, ...., 01234
fuente
select right('00000' || cast(Your_Field as varchar(5)), 5)
También puede utilizar la función FORMAT () introducida en SQL Server 2012 . http://technet.microsoft.com/library/hh213505.aspx
fuente
Úselo
REPLICATE
para que no tenga que codificar todos los ceros iniciales:SALIDA:
fuente
No para High-Jack esta pregunta, pero debe tomarse en cuenta que debe usar (N) VARCHAR en lugar de (N) CHAR tipo de datos.
El segmento anterior, no producirá la respuesta correcta de SQL 2005
El segmento anterior producirá la respuesta deseada de SQL 2005
El varchar le proporcionará la longitud de prefijo deseada sobre la marcha. Donde, como el tipo de datos de longitud fija, requerirá designación de longitud y ajustes.
fuente
Me gusta usar
esto me da
fuente
RIGHT(1000+Number, 3)
- agradable, corto y rápidoEl tipo de datos "int" no puede tener más de 10 dígitos; además, la función "Len ()" funciona en ints, por lo que no es necesario convertir el int en una cadena antes de llamar a la función len ().
Por último, no está teniendo en cuenta el caso en el que el tamaño de su int> el número total de dígitos que desea rellenar (@intLen).
Por lo tanto, una solución más concisa / correcta es:
fuente
No es muy elegante, pero agrego un valor establecido con el mismo número de ceros iniciales que deseo al numérico que deseo convertir y uso la función DERECHA.
Ejemplo:
fuente
Solución de una línea ( per se ) para SQL Server 2008 o superior:
La multiplicación por
SIGN
expresión es equivalente aMAX(0, @DesiredLenght-LEN([Column]))
. El problema es queMAX()
solo acepta un argumento ...fuente
Encontré un buen artículo aquí :
fuente
Por cierto, si es una columna int, entonces todavía no mantendrá los ceros Solo hágalo en la capa de presentación o si realmente lo necesita en SELECT
fuente
Tenía el mismo problema, así es como lo resolví ... Simple y elegante. El "4" es la longitud que debe tener la cadena, no importa qué longitud de entero se pase, se rellenará con ceros hasta "4".
fuente
En mi caso, quería que mi campo tuviera 0 a la izquierda en un campo de 10 caracteres (NVARCHAR (10)). El archivo de origen no tiene los ceros iniciales necesarios para luego unirse a otra tabla. Hizo esto simplemente por estar en SQL Server 2008R2:
Establecer campo = derecha (('0000000000' + [Campo]), 10) (No se puede usar Format () ya que es anterior a SQL2012)
Realicé esto contra los datos existentes. De esta manera, 1 o 987654321 aún llenará los 10 espacios con ceros a la izquierda.
A medida que se importan los nuevos datos y luego se descargan en la tabla a través de una base de datos de Access, puedo usar el formato ([Campo], "0000000000") al agregar datos de Access a la tabla del servidor SQL para cualquier registro nuevo.
fuente
- Sin el 'RTRIM', el valor devuelto es
3__
!!!- Sin el 'RTRIM', el valor devuelto es
867___
!!!fuente
Usar
RIGHT
es una buena opción, pero también puede hacer lo siguiente:donde
N
es el número total de dígitos que desea mostrar. Entonces, para un valor de 3 dígitos con ceros a la izquierda (N = 3
):o alternativamente
Lo que está haciendo es agregar el valor deseado a una potencia de 10 lo suficientemente grande como para generar suficientes ceros a la izquierda y luego cortar el 1 a la izquierda.
La ventaja de esta técnica es que el resultado siempre tendrá la misma longitud, lo que permitirá el uso de en
SUBSTRING
lugar deRIGHT
, que no está disponible en algunos lenguajes de consulta (como HQL).fuente
Este trabajo para mí en MYSQL:
Por ejemplo:
Espero que esto ayude. Atentamente
fuente
Funciona en SQLServer
Disfrutar
fuente
Me preguntaba, ¿esto te sería útil?
fuente