【问题标题】:Convert Month name to month number SQL将月份名称转换为月份编号 SQL
【发布时间】:2021-10-03 02:25:35
【问题描述】:

ORACLE SQL 中是否有一个函数可以将月份名称转换为月份编号,但只是这个没有日期和年份? 例如我有 FEB,我想在 02 年转换它

【问题讨论】:

  • 在 sql 查询中或者您想更改日期格式?
  • 我在 Oracle Data Integrator 工作,我有一个带有月份名称 (FEB) 的字段,我想将其转换为月份编号 (02),所以我需要一个像 monthnumber('myfield') 这样的函数将月份的名称转换为数字
  • 列的数据类型是什么?
  • 数据类型为字符串

标签: sql oracle date


【解决方案1】:

您可以使用CASE 表达式:

SELECT CASE month_name
       WHEN 'JAN' THEN 1
       WHEN 'FEB' THEN 2
       WHEN 'MAR' THEN 3
       WHEN 'APR' THEN 4
       WHEN 'MAY' THEN 5
       WHEN 'JUN' THEN 6
       WHEN 'JUL' THEN 7
       WHEN 'AUG' THEN 8
       WHEN 'SEP' THEN 9
       WHEN 'OCT' THEN 10
       WHEN 'NOV' THEN 11
       WHEN 'DEC' THEN 12
       ELSE NULL
       END AS month_number
FROM   your_table;

DECODE 函数:

SELECT DECODE(
         month_name,
         'JAN', 1,
         'FEB', 2,
         'MAR', 3,
         'APR', 4,
         'MAY', 5,
         'JUN', 6,
         'JUL', 7,
         'AUG', 8,
         'SEP', 9,
         'OCT', 10,
         'NOV', 11,
         'DEC', 12
       ) AS month_number
FROM   your_table;

TO_CHARTO_DATE

SELECT TO_CHAR(
         TO_DATE(month_name, 'MON', 'NLS_DATE_LANGUAGE=American'),
         'MM'
       ) AS month_number
FROM   your_table;

EXTRACTTO_DATE

SELECT EXTRACT(
         MONTH FROM TO_DATE(month_name, 'MON', 'NLS_DATE_LANGUAGE=American')
       ) AS month_number
FROM   your_table;

【讨论】:

  • 是的,我试图避免这种情况,我试图找到一个应该存在的函数
  • 这是正确的答案。但是将一个月保存为单独的列的想法太可怕了。
  • "是的,我试图避免这种情况,我试图只找到一个函数" 所以将演示的代码放在一个函数中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 2011-06-04
  • 2017-06-17
相关资源
最近更新 更多