به دستورات زیر دقت کنید:
SQL> CREATE TABLE MYDATE(BIRTHDATE DATE);
Table created.
SQL> INSERT INTO MYDATE VALUES (TO_DATE('22/09/14','DD/MM/YY'));
1 row created.
SQL> SELECT * FROM MYDATE;
BD
-------
22-SEP-14
SQL> ALTER SESSION SET NLS_CALENDAR='PERSIAN';
session altered
SQL> SELECT * FROM MYDATE;
BIRTHDATE
------------------
31 SHAHRIVAR 1393
نکته: جنس DATE فقط به صورت میلادی است و فقط در SESSION میتوان نحوه نمایش را شمسی انتخاب کرد.
توجه کنید اگر میخواهید به صورت کامل تاریخ فارسی را در دیتابیس نگهداری کنید یعنی به صورتی که در ساختار جدول تاریخ فارسی باشد باید تاریخ را به صورت رشته ذخیرهسازی نمایید.
SQL> CREATE TABLE MYDATE2(BD VARCHAR2(40));
Table created.
SQL> INSERT INTO MYDATE2 VALUES(TO_CHAR(SYSDATE, 'YYYY/MM/DD'));
1 row created.
SQL> SELECT * FROM MYDATE2;
BD
--------------------
1394/11/25
به این ترتیب اگر هم یوزر خارج شود یا SESSION جاری از بین برود تاریخ به صورت شمسی در VARCHAR به صورت STRING موجود میباشد.
نکته: توجه کنید برای ذخیرهسازی تاریخ فارسی فرقی نمیکند که از کدوم روش استفاده کنید(نوع دادهای یا به صورت رشتهای) چون حتی اگه به صورت رشتهای ذخیرهسازی کنید میتوانید با تابع TO_DATE آن را به تاریخ تبدیل کنید.
مثال: فیلد تولد در جدول MYDATE2 را ۲۰ روز به جلو ببرید:
SQL> ALTER SESSION SET NLS_CALENDAR='PERSIAN';
Session altered.
SQL> SELECT TO_DATE(BD,'YY/MM/DD') FROM MYDATE2;
TO_DATE(BD,'YY/MM/D
-------------------
25 Bahman 1394
SQL> SELECT TO_DATE(BD,'YY/MM/DD')+20 FROM MYDATE2;
TO_DATE(BD,'YY/MM/D
-------------------
15 Esfand 1394
تبدیل تاریخ میلادی به شمسی
SQL> SELECT TO_DATE(BD,'YY/MM/DD','NLS_CALENDAR=PERSIAN') FROM MYDATE2;
TO_DATE('
---------
23-OCT-13