sql - TO_CHAR 和 TO_DATE 给出不同的结果。如何使用 TO_DATE 实现 TO_CHAR 功能?

标签 sql oracle date-formatting to-date to-char

SELECT TO_CHAR((select logical_date -1 from logical_date 
where logical_date_type='B'),'DD/MM/YYYY HH24:MI:SS') FROM DUAL;

此查询返回 23/04/2016 00:00:00
o/p of select logical_date -1 from logical_date where logical_date_type='B' :4/23/2016

SELECT TO_DATE((select logical_date -1 from logical_date 
where logical_date_type='B'),'DD/MM/YYYY HH24:MI:SS') FROM DUAL;

此查询返回 4/23/0016 .

如何使用 TO_DATE 获取 TO_CHAR 给出的格式?

最佳答案

日期没有任何内在格式。 Oracle 有一个内部表示,它看起来不像您认为是日期的任何东西。客户端或应用程序决定如何显示日期(例如使用 NLS_DATE_FORMAT),或者您可以使用 TO_CHAR将日期转换为具有您指定格式的字符串,就像您在第一个示例中所做的那样。

在您的第二个示例中,您使用 NLS 设置将实际日期隐式转换为字符串 - 在此过程中丢失了世纪,因此大概有 YY 而不是 YYYY - 然后将其转换回日期。我很惊讶在您交换月和日位置时不会出错。

不要那样做。转换为字符串并返回日期是毫无意义的,即使您的设置不会在此过程中丢失信息。

如果您希望将其作为客户端或其他进程使用的日期,请执行以下操作:

select logical_date -1
from logical_date 
where logical_date_type='B'

如果您想与另一个日期进行比较,则仍将其保留为日期:
select other_columns
from logical_date 
where logical_date_type='B'
and logical_date -1 < sysdate

如果要指定格式 用于展示 然后使用:
select to_char(logical_date -1, 'DD/MM/YYYY')
from logical_date 
where logical_date_type='B'

关于sql - TO_CHAR 和 TO_DATE 给出不同的结果。如何使用 TO_DATE 实现 TO_CHAR 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309702/

相关文章:

sql - 选择列是两个可能值之一

mysql - MS SQL Server 2005 中的 LIMIT 样式功能

oracle - 如何使用 Oracle 的 sdo_distance

python - 在 64 位 linux 机器上运行 32 位 Python 脚本以使用 32 位客户端连接到 oracle DB

java - SimpleDateFormat 的格式化语法是 Java 发明的吗?

python - 如何读取获取的单元格数据的值作为日期谷歌表格 API

sql - 比较 HIVE 中的两个表

MySQL : How to get the sum columns by name of alias

sql - 如何在 Oracle 查询中结合使用 SELECT DISTINCT 和 ROWNUM

c# - 月份缩写显示 4 个字符而不是 3 个