【问题标题】:Convert datatype to Date format将数据类型转换为日期格式
【发布时间】:2016-10-13 05:08:39
【问题描述】:

我无法在创建视图时将列的数据类型设为 DATE,默认数据类型为 varchar2。如何将其更改为 DATE 列。

下面是列定义:

TO_CHAR(DATE'1970-01-01' + ( 1465484488329 / 86400000 ), 'YYYY/MM/DD HH24:MI:SS') AS StartTime

输出将是

2016/06/09 15:01:28

但它默认为 Varchar2 格式。请建议如何将其设为日期列类型。

【问题讨论】:

    标签: sql date select oracle11g varchar2


    【解决方案1】:

    to_char 返回varchar。忽略它,你应该有一个date

    DATE'1970-01-01' + ( 1465484488329 / 86400000 )
    

    【讨论】:

    • 它在结果集中省略了小时、分钟和秒,我也想保留这些数据,
    • @ankitpandey - 不,不是。您的客户正在以特定格式显示日期,例如 DD-MON-YYYY。你想要一个日期,你有一个日期,包括时间。如果您想以特定格式将日期显示为文本,请使用to_char(),但您通常希望在最后一刻这样做。大多数客户端还允许您定义特定格式;或者您可以依赖 NLS 设置 - 但您不知道运行查询的其他人会看到什么。
    • @AlexPoole - 你的意思是,你尝试了没有TO_CHAR 的查询,它显示你的结果是 YYYY/MM/DD HH24:MI:SS 格式?我在 SQL Developer 中查询它并通过 Putty 连接它,在这两个地方我只得到没有小时、分钟和秒的 DATE,这个设置是在数据库级别还是客户端级别
    • @ankitpandey - 客户端级别。要显示这样做alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS' 并查询您的视图。请注意,这会影响 所有 日期的显示方式,并且是特定于会话的。您的视图应该返回 DATE 数据类型,而不是字符串,并让查询它的人按照他们需要的方式对其进行格式化。
    • @AlexPoole - 我不确定alter session 是否会改变其他用户的情况,我检查了其他属性,下面是:NLS_DATE_FORMAT DD-MON-RR, NLS_TIME_FORMAT HH.MI.SSXFF AM, NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM, NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR, NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR 我可以使用其中的任何一个吗?我的意思是将其转换为时间戳,但数据类型仍为 Date ?
    猜你喜欢
    • 2017-07-15
    • 2021-04-10
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多