如果第一行不是 SSIS Excel 数据源的日期,则读取日期列

发布于 2025-01-01 07:30:09 字数 299 浏览 0 评论 0原文

我正在尝试读取包含日期列的 Excel 工作表。由于第一行是空的,SSIS 似乎将该列视为数字列。

以下是 Excel 列:

在此处输入图像描述

当我在 ssis Excel 源编辑器中预览它时,它显示:

在此处输入图像描述

您可以看到我的 TermDate 列显示为数字而不是日期。非常感谢任何帮助

I am trying to read in an excel worksheet that has a date column. It appears that SSIS is treating the column as a number column since the first row is empty.

Here are the Excel columns:

enter image description here

When I preview it inside of ssis Excel source editor it shows:

enter image description here

You can see my TermDate column is showing up as numbers and not a date. Any help is greatly appreciated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

零度℉ 2025-01-08 07:30:09

欢迎使用 Excel 的日期存储。 http://www.debugging.com/bug/19252 我最终在C# 应用程序从数字日期切换到日期时间日期。

    /// <summary>
    /// Seriously?  For the loss
    /// <see cref="http://www.debugging.com/bug/19252"></see>
    /// </summary>
    /// <param name="excelDate">Number of days since 1900-01-01</param>
    /// <returns>The converted days to date</returns>
    public static DateTime ConvertXlsdtToDateTime(int excelDate)
    {
        DateTime dt = new DateTime(1899, 12, 31);

        // adjust for 29 Feb 1900 which Excel considers a valid date
        if (excelDate >= 60)
        {
            excelDate--;
        }

        return dt.AddDays(excelDate);
    }

您可以在脚本转换中使用该公式来生成日期时间值,也可以使用丑陋的表达式来执行相同的操作。现在已经很晚了,所以我假设您的日期在上面提到的假 1900-02-29 之后

DATEADD("day",TermDate - 1,(DT_DATE)"1899-12-31")

下面是一个使用您的输入数据(派生列中的上述表达式)生成 ExcelDate 的示例。我携带了 TermDateAsDate 以确保我按照预期匹配日期。

在此处输入图像描述

Welcome to Excel's storage of dates. http://www.debugging.com/bug/19252 I ended up using this function in C# app to switch from the numeric date to a datetime date.

    /// <summary>
    /// Seriously?  For the loss
    /// <see cref="http://www.debugging.com/bug/19252"></see>
    /// </summary>
    /// <param name="excelDate">Number of days since 1900-01-01</param>
    /// <returns>The converted days to date</returns>
    public static DateTime ConvertXlsdtToDateTime(int excelDate)
    {
        DateTime dt = new DateTime(1899, 12, 31);

        // adjust for 29 Feb 1900 which Excel considers a valid date
        if (excelDate >= 60)
        {
            excelDate--;
        }

        return dt.AddDays(excelDate);
    }

You can either use that formula in a script transformation to generate a DateTime value or use an ugly expression to do the same. It's late so I'm assuming your dates are after the fake 1900-02-29 as mentioned above

DATEADD("day",TermDate - 1,(DT_DATE)"1899-12-31")

Below is an example using your input data, the above expression in a derived column to generate ExcelDate. I carried the TermDateAsDate to ensure I was matching dates as expected.

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文