我正在开发一个数据仓库项目,并且想知道如何(最好是在数据流中的Derived Column组件中)从SQL日期时间记录中删除日期部分。
一旦我将日期时间转换为时间,我将在时间维度表中查找相关时间记录的时间。
有人可以在派生列转换中为我提供一个简单的函数吗?
示例:将日期时间(例如“12/02/2008 11:32:21 AM”)转换为“11:32:21 AM”。
答案 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。