这可能是一个非常简单的问题,但:
我正在尝试命名文件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”?
即使您要求的是纳秒(十亿分之一),我还是假设您的意思是毫秒(千分之一)的精度。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)
| 归档时间: |
|
| 查看次数: |
26552 次 |
| 最近记录: |