如何从SQL SSIS中删除日期时间字符串的日期?

时间:2009-05-09 20:47:26

标签: sql tsql ssis business-intelligence

我正在开发一个数据仓库项目,并且想知道如何(最好是在数据流中的Derived Column组件中)从SQL日期时间记录中删除日期部分。

一旦我将日期时间转换为时间,我将在时间维度表中查找相关时间记录的时间。

有人可以在派生列转换中为我提供一个简单的函数吗?

示例:将日期时间(例如“12/02/2008 11:32:21 AM”)转换为“11:32:21 AM”。

5 个答案:

答案 0 :(得分:7)

我只会对DT_DBTIME类型进行强制转换(使用派生列转换或转换类型转换)。 DT_DBTIME只包含(小时,分钟,秒)日期/时间的一部分,因此您将摆脱日期部分。

答案 1 :(得分:2)

如果您需要在变量表达式中执行此操作,Michael的解决方案将无效,但您可以使用以下表达式:

(DT_DATE)(DT_DBDATE)GETDATE()

(DT_DBDATE)仅将当前日期和时间转换为日期。但是新的数据类型与SSIS的日期时间不兼容。因此,您必须使用(DT_DATE)转换为兼容类型。

由于这个解决方案的礼貌属于Russel Loski,他已将其发布在他的博客中: http://www.bidn.com/blogs/RussLoski/ssas/1458/converting-datetime-to-date-in-ssis

答案 2 :(得分:2)

实际上,如果你颠倒前两个这样的表达式:(DT_DBDATE)(DT_DATE)GETDATE() 而不是(DT_DATE)(DT_DBDATE)GETDATE(),那么您将TRUNCATE关闭日期字段的时间。

如果DT_DATE表达式位于DT_DBDATE表达式之前,您的输出中仍将包含时间部分,但它将重置为全零。

答案 3 :(得分:1)

通过为调度应用程序编写报告,需要将时间存储为日期时间数据类型的一部分。我将datetime格式化为0,这给了你这个mon dd yyyy hh:miAM(或PM),并且只做了一个子串,它只返回AM / PM格式的时间。

以下示例。

DECLARE @S DATETIME = GETDATE()

SELECT SUBSTRING(CONVERT(NVARCHAR(30), @S , 0) , 13 , 10) AS ApptTime
    , CONVERT(NVARCHAR(30), @S , 0) AS ApptDate

答案 4 :(得分:-2)

我个人使用了一系列功能。 E.g:

ALTER FUNCTION [dbo].[TIMEVALUE]
(
 @Datetime datetime
)
RETURNS datetime
AS
BEGIN
    RETURN (@Datetime - CAST(ROUND(CAST(@Datetime AS float), 0, 1) AS datetime))
END

我很想获得所有的功劳,但它应该真正归功于this guy