【问题标题】:Converting Month Number(Date Time or 4 byte integer) to Month Name(String) SSIS将月份数(日期时间或 4 字节整数)转换为月份名称(字符串)SSIS
【发布时间】:2020-11-16 04:53:47
【问题描述】:

我需要将月份编号转换为月份名称。 我有日期时间作为日期类型 - 2009-01-01 00:00:00.000 我也有 4 字节整数数据类型 - 1

例如,我如何将此 1 转换为“一月”?

【问题讨论】:

标签: ssis expression derived-column


【解决方案1】:

我认为你在数据流中:

在脚本组件中从 Date 获取 Month Name 真的很容易:

  1. 在您的数据流中添加一个 varchar 列

  2. 标记您的日期列以进行读取访问

  3. 输入以下脚本

    Row.[NewColumnName] = Row.[Your Date Column].ToString("MMMM");
    

结果:

以下是任何日期部分到字符串格式的良好翻译:

// create date time 2008-03-09 16:05:07.123
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);

String.Format("{0:y yy yyy yyyy}", dt);  // "8 08 008 2008"   year
String.Format("{0:M MM MMM MMMM}", dt);  // "3 03 Mar March"  month
String.Format("{0:d dd ddd dddd}", dt);  // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}",     dt);  // "4 04 16 16"      hour 12/24
String.Format("{0:m mm}",          dt);  // "5 05"            minute
String.Format("{0:s ss}",          dt);  // "7 07"            second
String.Format("{0:f ff fff ffff}", dt);  // "1 12 123 1230"   sec.fraction
String.Format("{0:F FF FFF FFFF}", dt);  // "1 12 123 123"    without zeroes
String.Format("{0:t tt}",          dt);  // "P PM"            A.M. or P.M.
String.Format("{0:z zz zzz}",      dt);  // "-6 -06 -06:00"   time zone

此外,您还询问了宿舍。我认为这并不容易,但这是我从另一个答案中偷来的东西。

构建日期时间扩展:

正常季度:

public static int GetQuarter(this DateTime date)

{
    return (date.Month + 2)/3;
}

财政年度季度(本案例适用于从 4 月 1 日开始的季度):

public static int GetFinancialQuarter(this DateTime date)
{
    return (date.AddMonths(-3).Month + 2)/3;
}

整数除法会截断小数,给你一个整数结果。将方法放入静态类中,您将拥有一个扩展方法,如下所示:

Row.calendarQuarter = Row.[your Date Column].GetQuarter()
Row.fiscalQuarter = Row.[your Date Column].GetFinancialQuarter()

【讨论】:

  • 你是个天才。您如何在季度中做到这一点?
  • @user13739771 通过扩展添加季度翻译。在代码末尾的 2 } } 之间粘贴扩展定义。我的图像中的第 19 行。
【解决方案2】:

以下步骤:

  • 使用日期时间数据类型和赋值创建变量。
  • 在 ssis 中使用 MONTH 函数提取月份编号并分配给具有整数数据类型的新变量:@[User::newdata]= MONTH(@[User::dbdate])
  • 最终使用了手动比较所有 12 个月的 if else 条件 (可用代码:1

【讨论】:

    【解决方案3】:

    在 SQL Server 中,一种方法是:

    select datename(month, datefromparts(2000, 1, 1))
    

    第一个“1”是月份的列。年份是任意的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-07
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2016-10-14
      • 1970-01-01
      相关资源
      最近更新 更多