如何在 Oracle SQL 中将日期转换为 Shamsi/Persian 格式?

Sar*_*adi 1 sql oracle date

我想将日期转换为 Shamsi/波斯格式,但效果不佳。我的代码:

SELECT TO_CHAR('10-JUN-18', 'dd-mm-yy','nls_calendar=persian') 
FROM dual;
Run Code Online (Sandbox Code Playgroud)

我希望它是这样的:20-03-97

MT0*_*MT0 5

TO_CHAR( date_value, format_model, nls_parameters )DATE数据类型作为第一个参数。

'10-JUN-18'不是DATE数据类型;它是一个字符串文字(恰好看起来像一个日期)。Oracle 将尝试执行从字符串到日期的隐式转换,但此隐式转换失败(依赖隐式转换是不好的做法)。

如果您使用DATE文字,那么您的代码可以工作:

SELECT TO_CHAR(DATE '2018-06-10', 'dd-mm-yy','nls_calendar=persian') AS dt
FROM   DUAL;
Run Code Online (Sandbox Code Playgroud)
DT
97年3月20日

或者,您可以将字符串文字显式转换为日期,然后再将其转换回来:

SELECT TO_CHAR(
         TO_DATE('10-JUN-18', 'DD-MON-RR', 'NLS_DATE_LANGUAGE=English'),
         'dd-mm-yy',
         'nls_calendar=persian'
       ) AS dt
FROM   DUAL;
Run Code Online (Sandbox Code Playgroud)
DT
97年3月20日

db<>在这里摆弄