这可能是一个非常简单的问题,但是:
我正在尝试命名文件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”?
答案 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 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
。
但是,我不知道如何以您需要的精度从系统中获取当前日期。