SQLite có printf()
hàm hoặc định dạng format()
cho phép chúng ta định dạng số theo một chuỗi định dạng.
Như từ SQLite 3.18.0, nó chấp nhận một cờ dấu phẩy, cho phép chúng ta có dấu phân cách dấu phẩy ở các dấu hàng nghìn cho số nguyên.
Có thể thực hiện nhiều công việc khác để làm cho nó hoạt động với các số thực / dấu phẩy động.
Ví dụ
Dưới đây là một ví dụ về định dạng một số nguyên có dấu phẩy làm dấu phân cách hàng nghìn:
SELECT printf("%,d", 123456789);
Kết quả:
123,456,789
Chuỗi định dạng của "%,d"
là những gì quyết định kết quả này.
Số thực / dấu chấm động
Giải pháp trên chỉ hoạt động khi trả về số mà không có phần thập phân của nó.
Hãy áp dụng chuỗi định dạng đó cho một số thực:
SELECT printf("%,d", 1234567.4567);
Kết quả:
1,234,567
Chúng tôi vẫn nhận được dấu phẩy làm dấu phân tách nhóm vì chuỗi định dạng của chúng tôi không bao gồm phần phân số.
Dưới đây là cách trả về phần phân số:
SELECT printf("%.2f", 1234567.4567);
Kết quả:
1234567.46
Đây, chuỗi định dạng của "%.2f"
chỉ định rằng kết quả phải bao gồm hai chữ số thập phân. Chúng tôi có thể sử dụng "%.3f"
cho ba chữ số thập phân, v.v.
Bạn có thể cho rằng chúng tôi có thể làm như sau:
SELECT printf("%,d.2f", 1234567.4567);
Kết quả:
1,234,567.2f
Nhưng điều đó rõ ràng không hiệu quả.
SQLite không cung cấp cho chúng tôi khả năng định dạng mở rộng cho các số. Định dạng số có thể khá liên quan và thường tốt hơn nếu áp dụng định dạng ở cấp ứng dụng.
Điều đó nói rằng, nếu bạn thực sự cần làm điều này trong SQLite, bạn có thể thử định dạng phần nguyên bằng dấu phẩy, sau đó nối phần đó với phần thập phân.
Ví dụ:giả sử chúng ta có một cột cơ sở dữ liệu được gọi là price
, trả về kết quả sau:
SELECT price FROM Products;
Kết quả:
5457.99 1238999.99 11.357 3.49 3.0001 1234567.89 1499.5 9.49 149
Chúng tôi có thể làm điều gì đó dọc theo các dòng sau để định dạng tất cả các số đó bằng dấu phân cách hàng nghìn và một dấu thập phân:
SELECT
printf("%,d", price)
||
substr(
printf("%.2f", price),
instr(printf("%.2f", price), "."),
length(printf("%.2f", price)) - instr(printf("%.2f", price), ".") + 1
)
FROM Products;
Kết quả:
5,457.99 1,238,999.99 11.36 3.49 3.00 1,234,567.89 1,499.50 9.49 149.00
Định dạng format()
Chức năng
SQLite 3.38.0 (phát hành ngày 22 tháng 2 năm 2022) được đổi tên thành printf()
hàm thành format()
. printf()
gốc tên được giữ lại làm bí danh để tương thích ngược.
Do đó, ví dụ đầu tiên trên trang này có thể được thay đổi như sau:
SELECT format("%,d", 123456789);
Kết quả:
123,456,789