2012-11-30 358 views
4

这可能是一个非常简单的问题,但:SSIS填充日期时间格式:“HH毫米SS NNN CC月日”

我试图命名文件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毫米SS毫米DD”,我如何才能 “nnnccyy”?

+0

我很无知,nnn代表什么? – billinkc

+0

nnn代表纳秒。 – ROTHUSTLE

回答

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 ms。DateTime用于表示诸如墙上的时钟 或上次编辑文件的时间;它好好尝试一下有 已经纳秒级精度,所以也没有

如果你必须去纳秒的精度,开心狩猎但表达不会削减它。正如@fegemo所指出的那样,一个脚本任务可以让你获得1000万分之一的custom formatting,但这仍然与你想要的精度相差两个数量级。

this.Dts.Variables["User::CustomFormat"].Value = DateTime.Now.ToString("HHmmssfffffyyyyMMdd"); 
+0

这绝对有帮助。我的错误,我绝对意味着毫秒,我只是想纳米,因为n .. woops。非常感谢你的帮助! – ROTHUSTLE

0

作为每文档enter link description hereGetDate()在类型DT_DBTIMESTAMP,其具有3个小数位的最大值的秒后的精密返回日期:

,其由年的时间戳结构,月,日,小时,分钟, 秒和小数秒。小数秒具有3位数的最大值 。 enter link description here

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

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

步骤:

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

不幸的是,由于DT_DBTIMESTAMP的精确度有限,总会返回000

但是,我不知道如何从系统中获得所需精度的当前日期。

相关问题