SSIS填充日期时间格式:“hh mm ss nnn cc yy mm dd”

时间:2012-11-30 18:24:23

标签: ssis

这可能是一个非常简单的问题,但是:

我正在尝试命名文件TestSheet.hhmmssnnnccyymmdd

我在SSIS中设置了一个变量,表达式构建器中的表达式设置为:

@[User::str_Var] + 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) + ".txt"

我知道:

Right("0" + (DT_STR,4,1252) DatePart("m",getdate()),2) + Right("0" + (DT_STR,4,1252) DatePart("d",getdate()),2)

会让我“mm”和dd“

我的问题是......我有“hh mm ss mm dd”,我怎么得到“nnnccyy”?

2 个答案:

答案 0 :(得分:4)

即使你要求纳秒(十亿分之一秒),我也认为你的精确度是毫秒(千分之一)。 DATEPART仅提供毫秒精度的切片器。

使用表达式,构建格式字符串的位将如下所示

Right("0" + (DT_STR,2,1252) DatePart("hh",getdate()),2) 
+ Right("0" + (DT_STR,2,1252) DatePart("mi",getdate()),2) 
+ Right("0" + (DT_STR,4,1252) DatePart("ss",getdate()),2) 
+ Right("000" + (DT_STR,3,1252) datepart("Ms", getdate()),3) 
+ (DT_STR,4,1252) datepart("yyyy", getdate()) 
+ (DT_STR,2,1252) datepart("mm", getdate()) 
+ (DT_STR,2,1252) datepart("dd", getdate())

我不知道getdate是如何在内部工作的,但在研究中我确实找到了这个问题What is the best way to measure how long code takes to execute?但我认为它基本上是在调用DateTime.Now来自Eric Lippert的钱引用,但这个引用最为恰当。

  

请注意,DateTime测量的“挂钟时间”仅精确到   像30毫秒的东西。 DateTime用于表示时钟之类的东西   在墙上,或你上次编辑文件的时间;它没有必要   具有纳秒精度,因此它没有

如果你必须达到纳秒精度,快乐狩猎,但表达不会削减它。正如@fegemo指出的那样,一个脚本任务可以让你达到千万分之一custom formatting,但这仍然是你想要的精度的两个数量级。

this.Dts.Variables["User::CustomFormat"].Value = DateTime.Now.ToString("HHmmssfffffyyyyMMdd");

答案 1 :(得分:0)

根据文档enter link description hereGetDate()会返回DT_DBTIMESTAMP类型的日期,该日期在秒后的精度最多为3个小数位数:

  

时间戳结构,包括年,月,日,小时,分钟,   秒,小数秒。小数秒有一个最大值   3位数。enter link description here

您可以使用小数位数来确定所需的部分信息:

DT_DBTIMESTAMP        yyyy-mm-dd hh:mm:ss[.fff]

步骤:

  1. 使用DATEPART("Ms", GetDate())
  2. 获取毫秒数
  3. 将结果除以10^6(将毫秒转换为纳秒)
  4. 将结果转换为DT_I4,仅获取整数部分。
  5. 不幸的是,由于000的精确度有限,因此总会返回DT_DBTIMESTAMP

    但是,我不知道如何以您需要的精度从系统中获取当前日期。

相关问题