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

ROT*_*TLE 5 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)

会让我“毫米”和“ DD”

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

bil*_*nkc 5

即使您要求的是纳秒(十亿分之一),我还是假设您的意思是毫秒(千分之一)的精度。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())
Run Code Online (Sandbox Code Playgroud)

我不知道getdate在内部如何工作,但是在研究中我确实找到了这个问题,什么是衡量代码执行所需时间的最佳方法?但我想它基本上是DateTime.Now 在那儿调用埃里克·利珀特(Eric Lippert)的Money报价,但这是最相关的。

请注意,由DateTime测量的“挂钟时间”仅精确到30毫秒左右。DateTime用于表示墙上的时钟或上次编辑文件的时间。它不必具有纳秒级的精度,因此它不需要

如果您必须达到纳秒级的精度,那就顺其自然,但表达式不会降低精度。如@fegemo所示,脚本任务可以使您获得千分之一的自定义格式,但与所需的精度相比仍相差两个数量级。

this.Dts.Variables["User::CustomFormat"].Value = DateTime.Now.ToString("HHmmssfffffyyyyMMdd");
Run Code Online (Sandbox Code Playgroud)