Ngày không có định dạng - chúng được biểu thị bằng 7- hoặc 8 byte .
SELECT DUMP( SYSDATE ) FROM DUAL;
Sản lượng có thể:
Typ=13 Len=8: 220,7,11,26,16,41,9,0
Định dạng này rất hữu ích cho máy tính để so sánh ngày tháng nhưng không quá hữu ích đối với con người; vì vậy, khi máy khách SQL (SQL / plus, SQL Developers, TOAD, v.v.) hiển thị ngày, nó không hiển thị byte mà hiển thị dưới dạng chuỗi.
Nó thực hiện điều này bằng cách thực hiện một cuộc gọi ngầm tới TO_CHAR()
(hoặc một số phương pháp nội bộ khác để xâu chuỗi ngày tháng) và sử dụng mặt nạ định dạng mặc định để thực hiện chuyển đổi này.
SQL / Plus và SQL Developer sẽ sử dụng tham số phiên của người dùng NLS_DATE_FORMAT
để thực hiện chuyển đổi này - hãy xem câu trả lời này
liên quan đến điều này.
Vì vậy, truy vấn thứ hai của bạn đang được chuyển đổi một cách ngầm định để làm điều gì đó tiếp cận điều này (nhưng, gần như chắc chắn, hiệu quả hơn):
SELECT TO_CHAR(
TO_DATE('01-01-2015','DD-MM-YYYY'),
( SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT' )
)
FROM DUAL