En comparación con decir:
REPLICATE(@padchar, @len - LEN(@str)) + @str
sql
sql-server
tsql
Cade Roux
fuente
fuente
Respuestas:
Esto es simplemente un uso ineficiente de SQL, sin importar cómo lo haga.
tal vez algo como
donde X es su carácter de relleno y @n es el número de caracteres en la cadena resultante (suponiendo que necesita el relleno porque se trata de una longitud fija).
Pero como dije, realmente deberías evitar hacer esto en tu base de datos.
fuente
RTRIM(@str)
embargo, es posible que deba hacerlo si puede contener espacios finales.Sé que esto se solicitó originalmente en 2008, pero hay algunas funciones nuevas que se introdujeron con SQL Server 2012. La función FORMAT simplifica muy bien el relleno dejado con ceros. También realizará la conversión por usted:
Actualizar:
Yo mismo quería probar la eficacia real de la función FORMATO. Me sorprendió bastante descubrir que la eficiencia no era muy buena en comparación con la respuesta original de AlexCuse . Aunque encuentro que la función FORMAT es más limpia, no es muy eficiente en términos de tiempo de ejecución. La tabla Tally que utilicé tiene 64,000 registros. Felicitaciones a Martin Smith por señalar la eficiencia del tiempo de ejecución.
Tiempos de ejecución de SQL Server: tiempo de CPU = 2157 ms, tiempo transcurrido = 2696 ms.
Tiempos de ejecución de SQL Server:
fuente
Varias personas dieron versiones de esto:
tenga cuidado con eso porque truncará sus datos reales si es más largo que n.
fuente
fuente
Tal vez una matanza excesiva tengo estos UDF para rellenar de izquierda a derecha
y a la derecha
fuente
No estoy seguro de que el método que proporcione sea realmente ineficiente, pero una forma alternativa, siempre que no tenga que ser flexible en la longitud o el carácter de relleno, sería (suponiendo que quiera rellenarlo con " 0 "a 10 caracteres:
fuente
probablemente exagerado, a menudo uso este UDF:
Para que puedas hacer cosas como:
fuente
Me gustó la solución vnRocks, aquí está en forma de udf
fuente
Esta es una manera simple de rellenar a la izquierda:
Dónde
x
está el número de pad yy
el carácter del pad.muestra:
fuente
1
convierte001
.fuente
En SQL Server 2005 y versiones posteriores, podría crear una función CLR para hacer esto.
fuente
Qué tal esto:
3 es el número de
zeros
padfuente
Espero que esto ayude a alguien.
fuente
Yo uso este Le permite determinar la longitud que desea que tenga el resultado, así como un carácter de relleno predeterminado si no se proporciona uno. Por supuesto, puede personalizar la longitud de la entrada y la salida para los máximos que esté buscando.
Su experiencia puede ser diferente. :-)
Joey Morgan
Programador / Analista Director I
Unidad de Negocio de WellPoint Medicaid
fuente
Aquí está mi solución, que evita cadenas truncadas y usa SQL simple. Gracias a @AlexCuse , @Kevin y @Sklivvz , cuyas soluciones son la base de este código.
fuente
Sé que esto no está agregando mucho a la conversación en este momento, pero estoy ejecutando un procedimiento de generación de archivos y va increíblemente lento. He estado usando replicar y vi este método de recorte y pensé que lo probaría.
Puede ver en mi código dónde el cambio entre los dos es adicional a la nueva variable @padding (y la limitación que ahora existe). Ejecuté mi procedimiento con la función en ambos estados con los mismos resultados en tiempo de ejecución. Entonces, al menos en SQLServer2016, no veo ninguna diferencia en la eficiencia que otros encontraron.
De todos modos, aquí está mi UDF que escribí hace años más los cambios de hoy, que es muy similar al de otro, ya que tiene una opción de parámetro IZQUIERDA / DERECHA y alguna comprobación de errores.
fuente
Tengo una función que lpad con x decimales: CREATE FUNCTION [dbo]. [LPAD_DEC] (- Agregue los parámetros para la función aquí @pad nvarchar (MAX), @string nvarchar (MAX), @length int, @dec int ) DEVOLUCIONES nvarchar (max) COMO COMIENZO - Declare aquí la variable de retorno DECLARE @resp nvarchar (max)
FINAL
fuente
Para proporcionar valores numéricos redondeados a dos decimales pero rellenados a la derecha con ceros si es necesario, tengo:
Si alguien puede pensar en una forma más ordenada, eso sería apreciado: lo anterior parece torpe .
Nota : en este caso, estoy usando SQL Server para enviar informes por correo electrónico en formato HTML y, por lo tanto, deseo formatear la información sin involucrar una herramienta adicional para analizar los datos.
fuente
Así es como normalmente rellenaría un varchar
fuente