sql >> Base de Datos >  >> RDS >> SQLite

Dar formato a números con una coma en SQLite

SQLite tiene un printf() función o format() función que nos permite formatear números de acuerdo con una cadena de formato.

A partir de SQLite 3.18.0, acepta un indicador de coma, lo que nos permite tener separadores de coma en las marcas de miles para números enteros.

Se puede trabajar más para que funcione con números reales/coma flotante.

Ejemplo

Este es un ejemplo de formato de un número entero con una coma como separador de miles:

SELECT printf("%,d", 123456789);

Resultado:

123,456,789

La cadena de formato de "%,d" es lo que determinó este resultado.

Números reales/coma flotante

La solución anterior solo funciona cuando se devuelve el número sin su parte fraccionaria.

Apliquemos esa cadena de formato a un número real:

SELECT printf("%,d", 1234567.4567);

Resultado:

1,234,567

Todavía tenemos comas como separadores de grupos, porque nuestra cadena de formato no incluye la parte fraccionaria.

Así es como se devuelve la parte fraccionaria:

SELECT printf("%.2f", 1234567.4567);

Resultado:

1234567.46

Aquí, la cadena de formato de "%.2f" especifica que el resultado debe incluir dos decimales. Podríamos usar "%.3f" para tres lugares decimales, y así sucesivamente.

Puede suponer que podemos hacer lo siguiente:

SELECT printf("%,d.2f", 1234567.4567);

Resultado:

1,234,567.2f

Pero eso claramente no funcionó.

SQLite no nos brinda amplias capacidades de formato para números. El formateo de números puede ser bastante complicado y, por lo general, es mejor aplicar el formato en el nivel de la aplicación.

Dicho esto, si realmente necesita hacer esto en SQLite, puede intentar formatear la parte entera con comas y luego concatenar eso con la parte decimal.

Por ejemplo, supongamos que tenemos una columna de base de datos llamada price , que devuelve el siguiente resultado:

SELECT price FROM Products;

Resultado:

5457.99   
1238999.99
11.357    
3.49      
3.0001    
1234567.89
1499.5    
9.49      
149  

Podríamos hacer algo como lo siguiente para formatear todos esos números con un separador de miles y un punto decimal:

SELECT
    printf("%,d", price) 
    || 
    substr(
    printf("%.2f", price), 
    instr(printf("%.2f", price), "."), 
    length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
    )
FROM Products;

Resultado:

5,457.99                                                                                                                                                                                     
1,238,999.99                                                                                                                                                                                 
11.36                                                                                                                                                                                        
3.49                                                                                                                                                                                         
3.00                                                                                                                                                                                         
1,234,567.89                                                                                                                                                                                 
1,499.50                                                                                                                                                                                     
9.49                                                                                                                                                                                         
149.00   

El format() Función

SQLite 3.38.0 (lanzado el 22 de febrero de 2022) cambió el nombre de printf() función para format() . El printf() original el nombre se conserva como un alias para la compatibilidad con versiones anteriores.

Por lo tanto, el primer ejemplo en esta página se puede cambiar de la siguiente manera:

SELECT format("%,d", 123456789);

Resultado:

123,456,789