5

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

我正在尝试命名文件 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”?

4

2 回答 2

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())

我不知道 getdate 在内部是如何工作的,但在研究中我确实发现了这个问题What is the best way to measure how long code takes to perform? 但我认为它基本上DateTime.Now 是从 Eric Lippert 那里调用 Money 报价,但这个是最相关的。

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

如果您必须达到纳秒级精度,那么快乐狩猎,但表情不会削减它。正如@fegemo 所指出的,脚本任务可以让您获得千分之一的自定义格式,但这仍然比您想要的精度低两个数量级。

this.Dts.Variables["User::CustomFormat"].Value = DateTime.Now.ToString("HHmmssfffffyyyyMMdd");
于 2012-11-30T20:06:17.770 回答
0

根据文档在此处输入链接描述GetDate()返回类型中的日期DT_DBTIMESTAMP,其精度为秒后最多 3 位小数:

由年、月、日、小时、分钟、秒和小数秒组成的时间戳结构。小数秒的最大刻度为 3 位数。在此处输入链接描述

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

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

脚步:

  1. 使用获取毫秒数DATEPART("Ms", GetDate())
  2. 将结果除以10^6(将毫秒转换为纳秒)
  3. 将结果转换为DT_I4, 以仅获取整数部分。

不幸的是,000由于DT_DBTIMESTAMP.

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

于 2012-11-30T19:35:15.203 回答