【问题标题】:How to convert date in Oracle?如何在 Oracle 中转换日期?
【发布时间】:2013-11-05 06:43:04
【问题描述】:

我在 MySQL 中有 sql 查询:

SELECT
   distinct 
   us.user_id as user_id, 
   us.ab_id,
   users.name,
   users.role,
   users.is_admin,
   DATE_FORMAT('2013-11-05T10:06:21+04:00', '%Y-%m') as month_m
FROM attach_offices as us
LEFT JOIN users ON users.id = user_id
WHERE us.`ab_id` = 999999999 and
 DATE_FORMAT('2013-11-05T10:06:21+04:00', '%Y-%m') between DATE_FORMAT(dt_begin, '%Y-%m') and DATE_FORMAT(`dt_end`, '%Y-%m')

如何将其转换为 Oracle 11g?我写的是这样的:

SELECT 
     distinct 
   attach_offices.user_id as user_id, 
   attach_offices.ab_id,
   users.name,
   users.role,
   users.is_admin,
   to_date('2013-11-05T10:06:21+04:00', 'YYYY-MM') as month_m       
FROM attach_offices 
LEFT JOIN users ON users.id = user_id
WHERE attach_offices.ab_id = 999999999 and
 to_date('2013-11-05T10:06:21+04:00', 'YYYY-MM') between to_date(to_char(dt_begin, 'YYYY-MM'), 'YYYY-MM') and to_date(to_char(dt_end, 'YYYY-MM'), 'YYYY-MM')

但它不起作用。 日期问题,当我使用2013-11-05T10:06:21+04:00 时它不起作用,但是当我使用2013-11 时它是工作

【问题讨论】:

    标签: mysql sql oracle oracle11g


    【解决方案1】:

    因为TO_DATE 将按格式将给定的STRING 转换为DATE,所以您已指定。
    DATE_FORMAT 但是按指定格式设置 DATE。

    所以您有以下选择:
    1.如果你想得到想要的DATE作为一些特制的STRING,那么你去TO_CHAR(DATE, '<format>')
    2. 如果要将给定的STRING 转换为DATE,请使用TO_DATE(string,'<format that describes string>')
    3. 如果您需要将一个特制的STRING 重新格式化为另一个STRING,那么两者都可以。首先将其转换为日期,如 2 中所述,然后转换回字符串,如 1 中所述,使用所需的格式。
    4.还有一种情况——如果你想改变输出格式,那么你需要ALTER SESSION变量NLS_DATE_FORMAT。

    【讨论】:

      【解决方案2】:

      我正在做这样的事情,但它似乎不是 DRY 和代码气味:

      SELECT 
         distinct 
         attach_offices.user_id as user_id, 
         attach_offices.ab_id,
         users.name,
         users.role,
         users.is_admin,
         to_date(to_char(to_date('2013-11-05T10:06:21+04:00', 'YYYY-MM-DD"T"HH24:MI:SS"+04:00"'), 'YYYY-MM'),'YYYY-MM') as month_m         
      FROM attach_offices 
      LEFT JOIN users ON users.id = user_id
      WHERE attach_offices.ab_id = 999999999 and
      to_date(to_char(to_date('2013-11-05T10:06:21+04:00', 'YYYY-MM-DD"T"HH24:MI:SS"+04:00"'), 'YYYY-MM'),'YYYY-MM') between to_date(to_char(dt_begin, 'YYYY-MM'), 'YYYY-MM') and to_date(to_char(dt_end, 'YYYY-MM'), 'YYYY-MM')
      

      【讨论】:

      • 使用 cmets 询问更多信息,您可以编辑您的问题以更新更多详细信息。至于下面的代码问题,第一个问题是你从哪里得到这个日期字符串?它真的是一个字符串吗?你想得到什么作为选择结果?
      猜你喜欢
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2017-06-16
      相关资源
      最近更新 更多