【问题标题】:Convert a number to yyyy-mm-dd format SQL将数字转换为 yyyy-mm-dd 格式 SQL
【发布时间】:2022-01-06 16:41:28
【问题描述】:

我有一个这样的列 120081212。​​列的格式是数字。

我用过:

SELECT to_date(to_char(SUBSTRING(My_Column,2,6)) ,'yymmdd')
FROM My_Table

输出为:2008-12-12 00:00:00.000。但我只想要2008-12-12

输出的格式并不重要。

【问题讨论】:

标签: sql date datetime oracle-sqldeveloper


【解决方案1】:

在 Oracle 中,DATE 是一种二进制数据类型,由 7 个字节组成,分别代表世纪、世纪、月、日、小时、分钟和秒,它总是那些组件。它从不存储任何格式信息。

因此,如果您希望 DATE 具有特定格式,则需要将其转换为可以存储格式化值的另一种数据类型(即字符串):

SELECT my_column,
       TO_CHAR(
         TO_DATE(
           SUBSTR(My_Column,2,8),
           'yyyymmdd'
         ),
         'YYYY-MM-DD'
       ) AS formatted_value
FROM   My_Table;

(注意:您需要SUBSTR 而不是SUBSTRING,并且您希望使用 8 个字符而不是 6 个字符。)

其中,对于样本数据:

CREATE TABLE My_Table (My_Column) AS
SELECT '120081212' FROM DUAL;

输出:

MY_COLUMN FORMATTED_VALUE
120081212 2008-12-12

如果您确实希望它为 DATE,请删除 TO_CHAR

SELECT my_column,
       TO_DATE(
         SUBSTR(My_Column,2,8),
         'yyyymmdd'
       ) AS date_value
FROM   My_Table;

但是,您将依赖您使用的任何用户界面将日期格式化为人类可读的格式。在 SQL/Plus 和 SQL Developer 中,这是基于 NLS_DATE_FORMAT 会话参数和 the default format is dependent on your territory

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多