sql >> Base de Datos >  >> RDS >> Sqlserver

Agregar ceros iniciales y finales en SQL Server

Algunos DBMS tienen un LPAD() y RPAD() función que se puede utilizar para rellenar números con ceros al principio y al final.

SQL Server no tiene tal función. Pero eso no impide que podamos rellenar números con ceros al principio o al final.

No enteros

Primero, veamos los números no enteros:

SELECT 
    FORMAT(7, '000.00') AS "1",
    FORMAT(17, '000.00') AS "2",
    FORMAT(73.5, '000.00') AS "3";

Resultado:

+--------+--------+--------+
| 1      | 2      | 3      |
|--------+--------+--------|
| 007.00 | 017.00 | 073.50 |
+--------+--------+--------+

Aquí, usamos el FORMAT() función para formatear el número. El primer argumento es el número y el segundo argumento es la cadena de formato. La función genera su resultado como una cadena formateada.

En el ejemplo anterior, la cadena de formato consta de especificadores de formato numérico personalizados que dan como resultado que se agreguen ceros al número original en los lugares donde no hay ningún dígito en el número original. Podemos usar tantos ceros en la cadena de formato como necesitemos.

SELECT 
    FORMAT(7, '00000.0000') AS "1",
    FORMAT(17, '00000.0000') AS "2",
    FORMAT(73.5, '00000.0000') AS "3";

Resultado:

+------------+------------+------------+
| 1          | 2          | 3          |
|------------+------------+------------|
| 00007.0000 | 00017.0000 | 00073.5000 |
+------------+------------+------------+

Enteros

Si el número original es un número entero, entonces tenemos que trabajar un poco más:

SELECT 
    REPLACE(FORMAT(7, '00000.0000', 'en-US'), '.', '') AS "1",
    REPLACE(FORMAT(17, '00000.0000', 'en-US'), '.', '') AS "2",
    REPLACE(FORMAT(73.5, '00000.0000', 'en-US'), '.', '') AS "3";

Resultado:

+-----------+-----------+-----------+
| 1         | 2         | 3         |
|-----------+-----------+-----------|
| 000070000 | 000170000 | 000735000 |
+-----------+-----------+-----------+

Aquí, usé REPLACE() función para eliminar el punto decimal después de que el número haya sido formateado con él.

Utilicé explícitamente en-US como el tercer argumento (opcional) para garantizar que el separador decimal sea un punto/punto y no otro carácter, como una coma. Algunas configuraciones regionales usan una coma como separador decimal. Si no especificamos explícitamente la configuración regional desde dentro de la función, se usa la configuración regional de la sesión actual. La especificación explícita de la configuración regional desde dentro de la función garantiza que la configuración regional de la sesión actual no se utilice y, por lo tanto, no pueda interferir con nuestra operación de reemplazo.

Azure SQL Edge

Azure SQL Edge se basa en una implementación limitada del motor de base de datos de SQL Server y, por lo tanto, admite la mayoría de las funciones de T-SQL que podemos usar con SQL Server. Sin embargo, en el momento de escribir este artículo, SQL Edge no es compatible con T-SQL FORMAT() función.

Consulte Cómo agregar ceros iniciales y finales en Azure SQL Edge para conocer un método alternativo (que también funciona en SQL Server).