【问题标题】:Convert a date with Oracle使用 Oracle 转换日期
【发布时间】:2016-02-23 11:50:57
【问题描述】:

我想用 Oracle 转换日期,格式如下:

25/01/2016 (DD/MM/YYYY)

转成这种格式:

2016-01-25 (YYYY-MM-DD)

这是所需的请求(来自this earlier question):

  WITH bounds AS (
      SELECT to_char(to_date('01/01/2016','DD/MM/YYYY'), 'YYYY-MM-DD') AS lower_bound,
             to_char(to_date('29/02/2016','DD/MM/YYYY'), 'YYYY-MM-DD') AS upper_bound
      FROM   DUAL
    ),
    weeks AS (
      SELECT LEVEL AS id,
             lower_bound + (LEVEL - 1) * 7 AS week_date
      FROM   bounds
      CONNECT BY lower_bound + (LEVEL - 1) * 7 <= upper_bound
    )
    SELECT 'W' || TO_CHAR( week_date, 'WW' ) AS week
    FROM   weeks;

这行得通:

to_date(to_char(to_date('".$dateDebut."','DD/MM/YYYY'), 'YYYY-MM-DD'), 'YYYY-MM-DD')

【问题讨论】:

  • 当前是 DATE 还是字符串值?您现在如何查询/查看它?如果是日期,您是否依赖 NLS 设置对其进行格式化?
  • 我想这是一个字符串值
  • 您应该只需要to_date('".$dateDebut."','DD/MM/YYYY') - 将字符串转换为数据后,您无需再将日期转换为不同格式的字符串,然后再次转换为日期。跨度>
  • 顺便说一句 - 我在链接的问题中使用了DATE '2016-02-06',因为这是 ANSI 日期文字的格式(即直接创建日期而不是指定字符串并将其转换为日期)。如果您有其他格式的日期,则不需要使用此格式。

标签: oracle date format


【解决方案1】:

一种方法使用to_date()to_char()

select to_char(to_date(col, 'DD/MM/YYYY'), 'YYYY-MM-DD')

但是,您应该使用本地日期格式而不是字符串将日期存储在数据库中。

你也可以使用字符串操作:

select substr(col, 7, 4) || '-' || substr(col, 4, 2) || '-' || substr(col, 1, 2)

【讨论】:

    【解决方案2】:

    您只是真正尝试将字符串转换为日期;当您在查询中使用它时,它需要保留为日期,并且 Oracle 日期没有内在格式(它有一个您在这里不关心的内部表示)。

    您提出的解决方案:

    to_date(to_char(to_date('".$dateDebut."','DD/MM/YYYY'), 'YYYY-MM-DD'), 'YYYY-MM-DD')
    

    正在使用一种格式掩码将您的字符串转换为日期;然后使用不同的格式掩码返回字符串并再次返回日期。这是多余的,你只需要:

    to_date('".$dateDebut."','DD/MM/YYYY')
    

    所以你的查询变成了:

    WITH bounds AS (
      SELECT to_date(".$dateDebut.",'DD/MM/YYYY') AS lower_bound,
             to_date(".$dateFinis.",'DD/MM/YYYY') AS upper_bound
      FROM   DUAL
    ),
    weeks AS (
      SELECT LEVEL AS id,
             lower_bound + (LEVEL - 1) * 7 AS week_date
      FROM   bounds
      CONNECT BY lower_bound + (LEVEL - 1) * 7 <= upper_bound
    )
    SELECT 'W' || TO_CHAR( week_date, 'WW' ) AS week
    FROM   weeks;
    

    不过,将 UI 中的字符串值嵌入到查询中是不好的做法,因为这会使您容易受到 SQL 注入攻击。查看绑定变量以避免这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多