oracle里有date类型吗

说白了,Oracle的DATE类型就是一个“格式盲盒”。
你如何使用它取决于你如何转换它。

我先说最重要的事情。
日期格式特别棘手——英文版本默认为“DDMONYY”,中文版本更改为“Sun Month Year”。
去年我们就是因为这个才运行这个项目的。
有一次我们直接将 '03 -1 2 -2 02 3 ' 转换为字符串,系统直接报错。
用行话来说,这称为雪崩效应。
事实上,前面的轻微延迟导致后面的一切都下降了。
还有一点是TO_DATE函数必须有格式参数。
例如,要转换“1 8 个月 2 003 ”,必须写为 TO_DATE('1 8 个月 2 003 ', '月 YYYY')。
许多人不注意这一点。
还有另一个关键细节。
如果插入数据时字符串格式与TO_DATE参数不匹配,例如使用'MMDDYYYY'格式转换'03 1 2 2 02 3 ',Oracle会自动将月份向前推3 00年到'1 9 3 1 -1 2 -2 3 ' - 我们就遇到了这个陷阱。
当时我们认为这是一个系统错误。
后来我们发现事情有些不对劲。
经过检查数据,发现是Oracle的日期算法操纵。

一开始我以为中文版的《DDMMYYYY》和英文版的《DDMONYY》没有任何关系。
后来发现中文版可以互换使用。
例如,“1 8 月03 日”也可以解析为“2 003 -03 -1 8 ”。
但说实话,这很令人困惑。
如果你混淆了,很容易导致大问题。

建议在开发的代码中将日期格式硬编码,不要依赖系统默认值,尤其是多语言迁移项目。
等等,那是另一回事了。
Oracle DATE 类型存储时间戳,但它只精确到当天。
小时、分钟和秒默认为 0 - 这个细节也令人困惑。

sql中date类型怎么写

上周 你说得很对。

2 02 3 它适用于 DATE 类型。

那个朋友 曾经有人问我 MySQL 和 Oracle 有什么区别。

-- 创建表。
创建表订单(id INT, order_date DATE);
--输入标准日期。
INSERT INTO 订单值(1 , '2 02 3 -1 1 -1 5 ');
--留下年份。
INSERT INTO 订单 VALUES(2 , '1 1 -1 5 ');
--查询 从 WHERE order_date = '2 02 3 -1 1 -1 5 ' 中选择订单;
算了。

MySQL中使用DATE类型实现日期存储和查询mysql中date类型

DATE 类型用于以 YYYY-MM-DD 格式存储日期。
创建表时定义字段: CREATE TABLEorders(order_id int, order_date date); 插入数据:插入订单(order_date)值('2 02 3 -1 0-2 7 '); 查询数据:选择order_date在“2 02 3 -1 0-2 6 ”和“2 02 3 -1 0-2 8 ”之间的订单; 注意:DATE类型不存储时间,使用DATETIME类型存储日期和时间。

实用提醒:请确保日期格式符合YYYY-MM-DD,否则录入失败。

Java中Date及Timestamp

坦率地说,在 Java 中转换日期时间数据类型是一个常见的陷阱。
其实很简单。
Java的java.sql.Date只存储日期数据,而不存储时间数据,因此当使用PreparationStatement.setDate()时,时间数据将会丢失。
去年我们管理的项目数据量在3 000条左右,因此出现了很多问题。

首先,最重要的是java.sql.Date和java.util.Date之间的转换其实可以通过getTime()函数来实现。
例如,PreparationStatement.setDate(new java.sql.Date(date.getTime())) 就是这样处理的。
还有一点,如果你想获取包括日期和时间在内的完整数据,最好使用 resultSet.getTimestamp() 来避免一些可能出现的问题。
例如,java.util.Date date = new java.util.Date(resultSet.getTimestamp().getTime())。

一开始我以为直接用getTime()转换就可以了,后来发现是错误的,因为java.sql.Date和java.util.Date的getTime()返回的值是一样的,只是类型不一样,所以需要特别注意。

还有另一个重要的细节。
将时间戳转换为字符串时,如果不需要显示毫秒,可以在格式化时指定。
例如SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"),指定以毫秒为单位的格式将不会显示。

最后,关于java.sql.Date和java.util.Date之间的交叉转换,其实可以使用getTime()函数来实现。
java.util.Date utilDate = new java.util.Date(sqlDate.getTime()), java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime())。
或者,您可以使用 SimpleDateFormat 类来执行转换。

等等,还有一件事,如果你在DAO层处理这两种数据类型,转换时记得注意类型匹配。
我认为值得一试。
先了解这些转换的原理,然后应用到实际项目中,会减少很多麻烦。