SSIS将int格式的日期转换为日期(yyyy / mm / dd hh:mi:ss)

时间:2012-12-18 10:22:26

标签: ssis

在SSIS中,我的日期格式为2012123023 需要将其转换为2012/12/30 23:00:00 请帮忙!

2 个答案:

答案 0 :(得分:0)

我在SQL Server中使用过这个功能,虽然我不是SSIS专家,所以我不确定你是如何在SSIS包中实现它的。

我认为您可以在数据库中创建函数,然后从SSIS调用它。

编辑为您的测试用例工作,它确实假设该数字始终采用相同的格式。

--SELECT [dbo].[ConvertIntToDate](2012123023)


-- =============================================
-- Author:      Richard Andrews
-- Create date: 12/10/2012
-- Description: Safely attempts to convert an int into a date
-- =============================================
ALTER FUNCTION [dbo].[ConvertIntToDate] 
(
    @InputNumber INT 
)
RETURNS DATETIME
AS
BEGIN
    IF @InputNumber IS NULL
        BEGIN
            RETURN NULL
        END

    DECLARE @Result DATETIME    
    DECLARE @StringDate NVARCHAR(50)
    SET @StringDate = CAST(@InputNumber AS NVARCHAR(50))

    IF LEN(@StringDate) <> 10
        BEGIN
            RETURN NULL
        END

    DECLARE @FormattedStringDate NVARCHAR(50)    
    SET @FormattedStringDate = SUBSTRING(@StringDate, 1, 4)
        + '-' + SUBSTRING(@StringDate, 5, 2)
        + '-' + SUBSTRING(@StringDate, 8, 2)
        + ' ' + SUBSTRING(@StringDate, 9, 2) + ':00'

    IF ISDATE(@FormattedStringDate) = 0
        BEGIN
            RETURN NULL
        END

    SET @Result = CONVERT(DATETIME, @FormattedStringDate)

    RETURN @Result 
END

答案 1 :(得分:0)

它看起来不像有效的SQL Server日期格式(至少是SQL Server可以理解的格式)。

如果您100%确定字符串始终采用此格式,则可以执行类似

的操作
DECLARE @mydate VARCHAR(20)
SET @mydate=2012123023 
SELECT 
CAST(
SUBSTRING(@mydate,1,4)+'-'+SUBSTRING(@mydate,5,2)+'-'+SUBSTRING(@mydate,7,2)+' '+SUBSTRING(@mydate,9,2)+':00'
AS DATETIME)