-2

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

4

2 回答 2

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
于 2012-12-18T10:36:55.620 回答
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)
于 2012-12-18T11:19:21.703 回答