【问题标题】:Contatenating two date values into one column将两个日期值合并为一列
【发布时间】:2015-06-03 13:48:55
【问题描述】:

应该是一个非常简单的问题。我有两个字段 - 一个是一年字段,另一个是一个月字段。月份字段是一个整数,如果只有一位数字,例如六月的 6,则没有前导零。如果我现在将它们连接在一起,我想将这两个字段连接在一起以获得 201406 而不是 20146。我尝试了 year||to_char(month,'09'),但该字段显示为 2014 06,在年份和月份之间有一个空格。有没有办法在没有空格的情况下做到这一点?

【问题讨论】:

  • 使用trim(year)||to_char(month,'09') 那是因为你的 yaer 字段是用空格保存的
  • 感谢 Jorge,这应该可以,但仍显示 2014 06,长度为 7。还有其他建议吗?我使用的是 Oracle 11g,这很重要

标签: oracle date oracle11g concatenation to-char


【解决方案1】:

如果您的输出包含空格,则您的年份或月份列包含空格。要摆脱这些,您可以使用TRIM

with v_data(year, month) as (
  select '2015 ', ' 1' from dual union all
  select ' 2014 ', ' 12 ' from dual union all
  select '2014', '3' from dual
)
select trim(year) || lpad(trim(month), 2, '0') 
from v_data

(假设您确实有两个字符串列 - 如果您确实有两个日期列,请在您的问题中添加示例输入)

更新

如果你想改用to_char(),你应该使用FM format modifier来摆脱空间:

select trim(year) || trim(to_char(month, 'FM09')) 
from v_data

【讨论】:

  • 感谢两个答案都有效。出于某种原因,我也不得不修剪格式化的文件...trim(year)||trim(to_char(month,'09'))
  • 那是因为没有 FM 修饰符,to_char() 的许多格式模型都会添加前导空格,请参阅 Oracle 文档(我更新的答案中的链接)。
【解决方案2】:

问题在于,默认情况下,to_char 在正格式数字前面留一个空格,以便它们与负数很好地对齐。为了防止这种情况,请使用to_char(month,'fm09')

【讨论】:

    猜你喜欢
    • 2019-04-30
    • 2021-12-16
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2020-06-21
    相关资源
    最近更新 更多