这可能是一个非常简单的问题,但:
我试图命名一个文件 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”,我如何得到“nnccyy”?
即使你要求纳秒(十亿分之一),我假设你的意思是毫秒(千分之一)精度。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");
根据文档enter link description here,GetDate()
返回DT_DBTIMESTAMP
类型的日期,其精度为秒后最大 3 个小数位:
时间戳结构,由年、月、日、小时、分钟、秒和秒的小数部分组成。秒的小数部分的最大小数位数为 3。enter link description here
您可以使用小数来确定您需要的部分信息:
DT_DBTIMESTAMP yyyy-mm-dd hh:mm:ss[.fff]
步骤:
使用DATEPART("Ms", GetDate())
获取英里数
将结果除以10^6
(将毫秒转换为纳秒)
将结果强制转换为DT_I4
,只得到整数部分。
不幸的是,这总是返回000
,因为DT_DBTIMESTAMP
的精度有限。
但是,我不知道如何从系统中获取当前日期与您需要的精度。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(74条)