sql - 如何将 2020-08-20T12:02:02Z 日期转换为 DD-MM-YYYY sql?
问题描述
我想在 oracle 数据库中将“2020-08-20T12:02:02Z”日期转换为 DD-MM-YYYY。日期应类似于 20-08-2020。请指教。
解决方案
TL;DR:TO_CHAR( column_name, 'DD-MM-YYYY' )
用于明确格式化您的DATE
列。
列DATE
没有格式;它在内部存储为 7 字节(分别为世纪、世纪、月、日、小时、分钟和秒)。直到用户界面尝试显示日期,显示的值才会根据NLS_DATE_FORMAT
会话参数隐式格式化(这可以由任何用户在他们自己的会话中随时设置,因此多个用户可以有多种日期格式,并且这些隐式格式可以在会话中更改,因此您永远不应该依赖隐式格式来提供一致的输出)。
因此,如果您有 aDATE
并且它的值是,2020-08-20T12:02:02Z
那么您需要做的就是在显示它时对其进行格式化(使用TO_CHAR
)以不显示时间组件:
CREATE TABLE table_name (
column_name DATE
);
INSERT INTO table_name ( column_name )
VALUES ( DATE '2020-08-20' + INTERVAL '12:02:02' HOUR TO SECOND );
设置日期的隐式格式:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS"Z"';
然后:
SELECT column_name AS with_implicit_formatting,
TO_CHAR( column_name, 'DD-MM-YYYY' ) AS with_explicit_formatting
FROM table_name;
输出:
WITH_IMPLICIT_FORMATTING | WITH_EXPLICIT_FORMATTING :------------------------ | :------------------------ 2020-08-20T12:02:02Z | 20-08-2020
db<>在这里摆弄
注意:Z
格式模型暗示 Zulu ( UTC+0
) 时区。但是,日期不存储时区;因此,如果您想存储此时区信息,那么您应该使用TIMESTAMP WITH TIME ZONE
数据类型而不是 a (并且在将日期时间值从本地时区转换为应用正确时区DATE
时,您可能需要格外小心UTC+0
要转换为的偏移量,UTC+0
并且不要只采用日期时间组件并忽略本地时区。
推荐阅读
- python-3.x - 为多个测试用例运行 while 循环,其中用例数量未知
- amazon-web-services - 具有自定义域和 CORS 的 AWS API Gateway
- c++ - 指向没有变量的方法的指针,这段代码是如何工作的?
- database - 如何将此代码存储在 Laravel 中。没有错误,没有存储
- scala - 使用 ChainBuilder 定义用户流的最佳方法是什么?
- android - 无法在 ConstraintLayout 中移动子元素
- python - 字符串操作从字符串 python 中提取精确模式
- python - 为什么“tf.data.Dataset.from_tensor_slices”会打印输出中图像的所有路径?
- python - 每次我在不同的环境中安装 conda 时,conda 是否会安装一个单独的包副本?
- python - 为什么在全局范围内消息是“名称未定义”而不是“分配前引用的变量”?