我想将日期转换为 Shamsi/波斯格式,但效果不佳。我的代码:
SELECT TO_CHAR('10-JUN-18', 'dd-mm-yy','nls_calendar=persian')
FROM dual;
Run Code Online (Sandbox Code Playgroud)
我希望它是这样的:20-03-97
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<>在这里摆弄