Nếu bạn đã từng sử dụng TO_CHAR()
chức năng định dạng ngày sử dụng tên tháng, bạn có thể nhận thấy rằng đôi khi tháng được trả về với phần đệm bên phải.
Điều này xảy ra theo mặc định khi tên tháng ngắn hơn tên tháng dài nhất, dựa trên ngôn ngữ và lịch được sử dụng.
Ví dụ:nếu ngôn ngữ của bạn là tiếng Anh và lịch là Gregorian, thì tên tháng dài nhất là tháng 9, dài chín ký tự. Nếu bạn trả về tháng từ một ngày và có nghĩa là tháng 3 (dài năm ký tự), thì theo mặc định, tháng 3 sẽ có bốn dấu cách ở cuối (5 + 4 =9).
May mắn thay, có thể dễ dàng loại bỏ phần đệm bên phải này nếu cần. Để loại bỏ phần đệm bên phải, hãy sử dụng fm
công cụ sửa đổi định dạng.
Vấn đề
Đầu tiên, đây là vấn đề chúng tôi đang cố gắng giải quyết:
SELECT
TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;
Kết quả:
08-MARCH -2030
Chúng ta có thể thấy rằng có một khoảng cách lớn giữa tên tháng và năm. Nếu không muốn có khoảng cách này, chúng ta có thể sử dụng fm
bổ ngữ, như được hiển thị bên dưới.
Giải pháp
Bây giờ đây là giải pháp:
SELECT
TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;
Kết quả:
8-MARCH-2030
Bây giờ không có khoảng cách giữa tháng và năm.
Tất cả những gì tôi đã làm là thêm vào trước mô hình định dạng với fm
.
fm
công cụ sửa đổi định dạng là viết tắt của “Fill Mode”. Theo mặc định, Oracle sử dụng các ký tự trống ở cuối và các số không ở đầu để điền vào các phần tử định dạng với độ rộng không đổi. Chiều rộng bằng chiều rộng hiển thị của phần tử lớn nhất cho mô hình định dạng có liên quan. Sử dụng fm
công cụ sửa đổi loại bỏ tất cả các phần đệm như vậy.
Bạn có thể nhận thấy rằng fm
bổ nghĩa cũng loại bỏ số 0 đứng đầu trên số ngày. Nếu không muốn, chúng ta có thể đặt fm
bổ ngữ ở phía trước MONTH
phần tử định dạng thay thế.
Như thế này:
SELECT
TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;
Kết quả:
08-MARCH-2030
Lần này, fm
không được áp dụng cho ngày hôm đó, nhưng nó là áp dụng cho tháng và năm.
Nếu chúng ta không muốn loại bỏ các số 0 ở đầu năm, thì chúng ta cần thêm một fm
khác trước năm.
Dưới đây là một ví dụ minh họa ý tôi muốn nói:
SELECT
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-YYYY') AS "r1",
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-fmYYYY') AS "r2"
FROM DUAL;
Kết quả:
r1 r2 ______________ ________________ 08-MARCH-30 08-MARCH-0030
Cột đầu tiên chỉ sử dụng một fm
(trước MONTH
).
Cột thứ hai sử dụng hai fm
bổ ngữ (một ở trước MONTH
và một ở phía trước YYYY
).