我正试图将Oracle FORMS
中的日期类型数据存储为与DD-MM-YYYY
类似的格式掩码,但每次存储时都与DD/MON/YY
类似。我已经用NLS_DATE_FORMAT
更改了会话,但结果和以前一样。
表中写入的Oracle内部日期格式无法以任何方式更改,但同时也无关紧要。如果您处理的是DATE类型的列,那么您应该知道它包含日期和时间。你将如何、何时何地展示或使用它取决于你自己。以下是从原始OracleDATE格式派生的一些格式的示例。。。
WITH
t AS
(
Select SYSDATE "MY_DATE_COLUMN" From Dual
)
Select
MY_DATE_COLUMN "DATE_DEFAULT_FORMAT",
To_Char(MY_DATE_COLUMN, 'mm-dd-yyyy') "DATE_1",
To_Char(MY_DATE_COLUMN, 'yyyy/mm/dd') "DATE_2",
To_Char(MY_DATE_COLUMN, 'dd.mm.yyyy') "DATE_3",
To_Char(MY_DATE_COLUMN, 'dd.mm.yyyy hh24:mi:ss') "DATE_4"
From t
DATE_DEFAULT_FORMAT | DATE_1 | DATE_2 | >DATE_3 | DATE_4 |
---|---|---|---|---|
22-OCT-22 | 2022年10月22日 | 22022年10月10日 | 22.22年10月21日10:59:44
在Oracle中,DATE
是一种二进制数据类型,由7个字节组成(表示世纪、世纪年、月、日、小时、分钟和秒(。它ALWAYS具有这7个组件,并且NEVER以任何特定的人类可读格式存储。
每次存储时都像
DD/MON/YY
一样。
如前所述,不,它不会存储这样的日期;数据库将日期存储为7个字节。
您看到的是,用于连接数据库的客户端应用程序正在接收7字节的二进制日期值,并选择将其转换为您(用户(更容易理解的值,并且默认情况下将日期转换为格式为DD/MON/RR
的字符串。
您应该做的是通过以下方式之一更改客户端应用程序显示日期的方式:
- 更改Toad中的设置(查看>Toad选项>数据网格>Data并设置日期格式选项(,并允许Toad隐式格式化字符串;或
- 使用
TO_CHAR
显式格式化日期(TO_CHAR(column_name, 'DD-MM-YYYY')
(
我正在尝试像
DD-MM-YYYY
一样存储数据。
如果要存储日期,则将其存储为日期(没有格式(,并在显示时对其进行格式化。
如果你有一个有效的商业案例来以格式存储它,那么你需要将它存储为字符串,而不是日期,因为你可以格式化字符串;然而,这通常被认为是不好的做法,应该避免。
Sadman,为了添加其他人发布的内容,我建议您不要依赖NLS_DATE_FORMAT参数编写应用程序,而是屏幕和应用程序应该指定预期的DATE条目格式,代码应该使用to_DATE函数将数据存储到数据库中。所有应用程序SQL都应该使用TO_CHAR函数来格式化日期输出以供显示。