SSIS DATEPART的详细指南

276 阅读5分钟

SSIS DATEPART的定义

下面的文章提供了一个SSIS DATEPART的概要。DATEPART()函数提取了某个日期的一部分,一天,一月,一年,或时间。它每次都会生成一个整数,是日期的一个组成部分。提供的数字应该加到日期的哪一部分?例如,年(yy,yyyy),季度(qq,q),月(mm,m),年的一天(dy,y),日(dd,d),周(wk,ww),工作日(dw),小时(hh),分钟(mi,n),秒(ss,s),和毫秒(mm,m)都是有效值和缩写(ms)。

什么是SSIS DATEPART?

其语法是这样的

DATEPART(datepart, date)
  • datepart:这个参数定义了日期的哪一部分应该被用来生成一个新的整数。
  • date:是一个函数,返回一个有效的日期或日期格式化的文本。

平日数字的计算方法是使用diff % 7 + 1。因此,举例来说,假设星期一是一周的第一天,我们可以用这句话来寻找今天的日期的工作日。

SELECT DATEDIFF(day, 0, GETDATE ()) %7 + 1;

如果今天是星期二,上面的查询将返回两个。在这篇文章中,我更倾向于采用基于日期差异的方法。

下面的SSIS公式从日期时间中返回一个YYYMMDDHHMMSS风格的14个字符的时间戳(例如,用于变量或生成的列中的使用)。在这个例子中使用了当前的日期和时间;对于不同的日期时间,用具有相关值的变量/列/表达式改变getdate()。SSIS表达式在这里起到了至关重要的作用。SSIS表达式是字面意义、程序和运算符的集合,产生一个单一的数据值。一个特定的值或复合种类可以用来做一个声明:

(DT_STR,4,1252)DATEPART( "yyyy" , getdate() )
+ RIGHT("0" + (DT_STR,4,1252)DATEPART( "mm" , getdate() ), 2)
+ RIGHT("0" + (DT_STR,4,1252)DATEPART( "dd" , getdate() ), 2)
+ RIGHT("0" + (DT_STR,4,1252)DATEPART( "Hh" , getdate() ), 2)
+ RIGHT("0" + (DT_STR,4,1252)DATEPART( "mi" , getdate() ), 2)
+ RIGHT("0" + (DT_STR,4,1252)DATEPART( "ss" , getdate() ), 2)

上面的表达式是一个有1252个cod页的char计数,并铸造成另一个数据类型。

表达式是一个公式,可以用来根据一系列的要求计算一个值。在这种情况下,我将根据当前日期的格式YYYYMMDD,使用表达式来构造一个文件连接的文件名。

为了演示,我写了一个简单的SSIS包,执行一个SQL语句(即计算每个数据库的长度)并将结果保存到一个文件中。该包中只有一个数据流任务:

k

当我们切换到信息流标签时,你会发现该任务包含一个利用SQL Server连接的OLE DB源,以及一个利用文件连接的平面文件端点:

o

v

上述表达式是以同样的方式给出的,如上图所示:

"C:\\DatabaseSizes_" + (DT_WSTR,4) DATEPART("yyyy",GetDate()) +
RIGHT ("0" + (DT_WSTR,2) DATEPART("mm",GetDate()) ,2) +
RIGHT ("0" + (DT_WSTR,2)DATEPART("dd",GetDate()),2) + ".csv"

这将产生一个文件名,如。C:\Data123.csv。

接下来,要在文件名中包含一个时间,另一种表达方式是:

"C:\\Datas_" + (DT_WSTR,4)DATEPART("yyyy",GetDate()) +
RIGHT("0" + (DT_WSTR,2)DATEPART("mm",GetDate()) ,2) +
RIGHT ("0" + (DT_WSTR,2) DATEPART("dd",GetDate()),2) + "_" +
RIGHT ("0" + (DT_WSTR,2) DATEPART("hh",GetDate()),2)+
RIGHT ("0" + (DT_WSTR,2)DATEPART("mi",GetDate()),2) + ".csv"

SSIS DATEPART函数

时间来自DateTime。

如果我们想从一个日期时间对象中删除日期部分,将其转换为DT DBTIME。可以选择,我们可以将其铸成一个字符串:

(DT_STR,8,1252)(DT_DBTIME)@[User::datetimeVar]
(DT_STR,8,1252)(DT_DBTIME)[datetimeCol]
(DT_STR,8,1252)(DT_DBTIME)GETDATE()

为一周的开始选择一个日子。

SSSIS DATEFIRST函数可以用来确定一周的第一天。我们可以从1到7中选择一个值。只要指定值为1,周一就是一周的第一天。对于SSIS DATEFIRST,人们可以使用下面的表格来指定一个值。

1.要计算日期字段的四分之一天数。这里的文件是dtf。

例如

If the dtf is "2022-03-04" the count will be 60
If the dtf is "2022-06-20" the count will be 80

表达式

DATEDIFF("DAY",(DT_DATE)(((DT_WSTR,4)YEAR(dtf)) + "-" + ((DT_WSTR,2)(((DATEPART("QUARTER",dtf) – 1) * 3) + 1)) + "-1"),dtf)

2.要计算一个日期的季度数

例如

如果Dtf是 "2022-03-04",季度数将是2
如果Dtf是 "2022-06-20",季度数将是3
如果Dtf是 "2022-10-06",季度数将是5

(DT_WSTR,1)(DATEPART("QUARTER",Dtf))

SSIS DATEPART示例

在这一部分,让我们看看DATEPART SSIS的例子和区间值。

月名和日名不包括在SSIS包中。在我们的模块中,我们可以构建两个参数,并在其上创建表达式,直到我们在需要月名和日名时使用它们。

要得到月的名称:

SUBSTRING("January February March April May June July August September October November December ",((DATEPART("MONTH",GETDATE())-1)*10)+1,10)
SUBSTRING("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ",((DATEPART("MONTH",GETDATE())-1)*4)+1,3)

接下来,取出在SSIS中找到日或周,下面的表达式被赋予了:

(DT_STR,20,1252)((DATEPART("DW",[Transaction date]) == 7) ? "SUNDAY" :
(DATEPART("DW",[Transaction date]) == 1) ? "MONDAY" :
(DATEPART("DW",[Transaction date]) == 2) ? "TUESDAY" :
(DATEPART("DW",[Transaction date]) == 3) ? "WEDNESDAY" :
(DATEPART("DW",[Transaction date]) == 4) ? "THURSDAY" :
(DATEPART("DW",[Transaction date]) == 5) ? "FRIDAY" :
(DATEPART("DW",[Transaction date]) == 6) ? "SATURDAY" : "NULL")

我怎样才能在SSIS中检索一个给定工作日的日期?例如,我怎样才能获得上周二的日期?

要想获得当前周内每一天的日期,我们可以使用以下命令:

DECLARE @DesiredDay INT = 0;
DECLARE @OutputDate DATE;
SET DATEFIRST 2; /* Tuesday is day 2 */
SET @OutputDate = DATEADD(d, @DesiredDay - DATEPART(DW, GETDATE()), GETDATE());
SELECT @OutputDate;

获取 Year/Month/Day

@[User::Folder] + "\\"
+ (DT_WSTR, 4)YEAR(GETDATE())
+ "\\" + Right("0" + (DT_STR,4,1252) DatePart("m",getdate()),3)
+ "\\" + Right("0" + (DT_STR,4,1252) DatePart("d",getdate()),3)

返回 -\Folder\2022\02\02

简单的年月日

"P_File"
+ REPLACE(SUBSTRING((DT_STR, 30, 1252)GETDATE(), 1, 9), "-", "")
+ ".txt"

这将返回P_File2022\02\10

結論

最后,我们看到了日期部分在SSIS的日期时间函数中是如何发挥重要作用的。我们也看到了SSIS表达式是如何在文件和其他事物中评估各自的日/周的。