2012-11-30 84 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

但是,我不知道如何從系統中獲得所需精度的當前日期。

相關問題