我正在处理一个数据仓库项目,并且想知道如何(最好在数据流中的派生列组件中)从 SQL 日期时间记录中删除日期片段。
一旦我将日期时间转换为时间,我将查找时间以在时间维度表中找到相关的时间记录。
有人可以给我一个简单的函数来在派生列转换中完成这个吗?
示例:将日期时间(例如“12/02/2008 11:32:21 AM”)简单地转换为“11:32:21 AM”。
我正在处理一个数据仓库项目,并且想知道如何(最好在数据流中的派生列组件中)从 SQL 日期时间记录中删除日期片段。
一旦我将日期时间转换为时间,我将查找时间以在时间维度表中找到相关的时间记录。
有人可以给我一个简单的函数来在派生列转换中完成这个吗?
示例:将日期时间(例如“12/02/2008 11:32:21 AM”)简单地转换为“11:32:21 AM”。
我只会进行DT_DBTIME
类型转换(使用派生列转换或转换类型转换)。DT_DBTIME
仅包含日期/时间的(小时、分钟、秒)部分,因此您将摆脱日期部分。
实际上,如果您像这样反转前 2 个表达式: (DT_DBDATE)(DT_DATE)GETDATE()
而不是(DT_DATE)(DT_DBDATE)GETDATE()
,那么您将TRUNCATE
关闭日期字段的时间。
如果DT_DATE
表达式在表达式之前DT_DBDATE
,您的输出中仍然会有时间部分,但它会被重置为全零。
如果您需要在变量表达式中执行此操作,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
在为调度应用程序编写报告时遇到了这个问题,需要存储为日期时间数据类型的一部分的时间。我将日期时间格式化为 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
我个人为此使用了一系列功能。例如:
ALTER FUNCTION [dbo].[TIMEVALUE]
(
@Datetime datetime
)
RETURNS datetime
AS
BEGIN
RETURN (@Datetime - CAST(ROUND(CAST(@Datetime AS float), 0, 1) AS datetime))
END
我很想获得所有的功劳,但它真的应该归功于这个人。