Hey!! Sky!

May 19, 2006

日期的中文显示

    碰到了日期的中文显示问题,以前还真没想过用 to_char 直接显示中文日期的方法,今天一试出问题了,原来 Format 中指定 string 是要用 "" 包起来的。看看例子:



SQL> ed
Wrote file afiedt.buf


  1  select to_char(to_date('19530505','yyyymmdd'),'yyyy年mm月dd日')
  2* from dual
SQL> /
select to_char(to_date('19530505','yyyymmdd'),'yyyy年mm月dd日')
                                               *
ERROR at line 1:
ORA-01821: date format not recognized



    这种写法现在想想还真傻,呵呵,当然用 '' 包围起来那肯定是不行的,会和前面的 ' 冲突。查了下文档上面很清楚的写着哪些 Format 可以用,怎么用,还要多学习啊。



SQL> ed
Wrote file afiedt.buf


  1  select to_char(to_date('19530505','yyyymmdd'),'yyyy"年"mm"月"dd"日"') "Date
"
  2* from dual
SQL> /


Date
--------------------------------------------------------------------------------


1953年05月05日


    这下可以了,也可以修改环境变量 NLS_DATE_FORMAT ,变量 NLS_LANGUAGE 有默认的 NLS_DATE_FORMAT 格式,不过可以用 NLS_DATE_FORMAT 覆盖这个默认值,当然用 alter session 可以临时改变 session 的设置:



SQL> alter session set nls_date_format='yyyy"年"mm"月"dd"日"';


Session altered.


    修改之后,所有的日期类型会自动转换为 NLS_DATE_FORMAT 的格式显示出来。这个设置可以通过查询 NLS_SESSION_PARAMETERS 和 V$NLS_PARAMETERS 视图获得。NLS_INSTANCE_PARAMETERS 视图显示的是初始化参数中设置的格式,如果没有设置,就显示为空。NLS_DATABASE_PARAMETERS 应该是来自 sys.props$ 是数据库安装时的默认值。


    哈哈,记到这里,方便以后查询,下班咯。


Send A Comment