Oracle中不转换为CHAR格式化日期的方法咨询
首先得明确:Oracle的DATE类型本身没有固定显示格式,它存储的是日期时间的底层数值,你看到的格式完全由客户端工具的NLS参数控制。你用to_date(papf.start_date,'yyyy-mm-dd')没用,是因为papf.start_date已经是DATE类型,Oracle会先把它转成字符串(按当前NLS默认格式)再转回DATE,等于白折腾。
要实现mm/dd/yyyy的显示效果,且不把DATE转成CHAR,有两种靠谱方式:
临时修改当前会话的显示格式
执行这条SQL语句,之后当前会话里查询DATE类型字段都会以mm/dd/yyyy显示,结果依然是DATE类型,不是字符串:ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY';比如你再查
SELECT papf.start_date FROM ...,就会看到mm/dd/yyyy格式的日期,而且还能正常做日期运算(比如加减天数)。修改客户端工具的默认设置
如果你用的是PL/SQL Developer、SQL Developer这类工具,可以直接在工具的偏好设置里找到日期格式选项,把默认格式改成MM/DD/YYYY,这样每次连接都会自动用这个格式显示,不用每次执行ALTER SESSION。
注意:如果必须在查询结果里直接输出mm/dd/yyyy格式的文本,那绕不开to_char,比如SELECT to_char(papf.start_date,'MM/DD/YYYY') FROM ...,但这样结果会变成字符串类型,失去DATE类型的特性。如果只是要显示效果,优先用上面两种方法。
内容的提问来源于stack exchange,提问作者Aasem Shoshari

