5

我正在处理一个数据仓库项目,并且想知道如何(最好在数据流中的派生列组件中)从 SQL 日期时间记录中删除日期片段。

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

有人可以给我一个简单的函数来在派生列转换中完成这个吗?

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

4

5 回答 5

7

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

于 2009-05-10T22:56:55.543 回答
4

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

如果DT_DATE表达式在表达式之前DT_DBDATE,您的输出中仍然会有时间部分,但它会被重置为全零。

于 2012-06-27T16:22:46.103 回答
3

如果您需要在变量表达式中执行此操作,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

于 2011-10-19T08:05:07.263 回答
1

在为调度应用程序编写报告时遇到了这个问题,需要存储为日期时间数据类型的一部分的时间。我将日期时间格式化为 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
于 2011-11-16T21:21:45.287 回答
-2

我个人为此使用了一系列功能。例如:

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

我很想获得所有的功劳,但它真的应该归功于这个人

于 2009-05-11T13:49:27.047 回答