oracle 中的日期格式 PL/SQL

Date format in oracle PL/SQL

如何在 oracle 中检查 table 中特定列的日期格式? oracle DATE 数据类型是否能够存储两种格式(美国和欧洲)?如果是的话,有没有办法区分哪个是月份哪个是日期?

Oracle 日期以内部二进制数据格式存储。显示格式由客户端处理,不会存储。

这与数字相同,例如,根据 to_char 函数使用的格式掩码,相同的值可以显示为 1000、1,000.00、1e3 等。

在 Oracle 中,DATE 是一种二进制数据类型,由 7 个字节组成,每个

  1. 世纪;
  2. year-of-century;
  3. 月;
  4. 天;
  5. 小时;
  6. 分钟;和

总是具有这些组件并且从不以任何特定格式存储。


How to check the date format for a specific column in a table in oracle?

它没有任何格式,所以你不能。

如果您想查看 DATE 的二进制值,您可以使用 DUMP 函数:

SELECT DUMP(date_column) FROM table_name;

Does oracle DATE datatype have the ability to store both formats (US and european)?

不,它从不存储任何格式。

如果要存储格式化数据,则使用字符串data-type;但是,这通常被认为是日期的不良做法,因为如果您同时使用 DD/MM/YYYYMM/DD/YYYY,它会在日和月之间引入歧义。最佳做法是将日期存储为 DATE,然后在 DISPLAY 日期时选择适当的格式。


如果你想显示一个DATE日期类型那么你可以使用TO_CHAR函数并指定适合你想要的地区的格式模型将其显示为。

SELECT TO_CHAR(date_column, 'DD/MM/YYYY HH24:MI:SS') AS eu_format,
       TO_CHAR(date_column, 'MM/DD/YYYY HH24:MI:SS') AS us_format,
       TO_CHAR(date_column, 'YYYY-MM-DD"T"HH24:MI:SS') AS iso8601_format
FROM   table_name

db<>fiddle here

默认格式模型(由 SQL 引擎在隐式转换 strings-to-dates 和 vice-versa 时使用,或由某些客户端应用程序使用 DISPLAY .

中列出了不同地区的日期)