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」を取得します

私の質問は..「hhmmssmm dd」がありますが、「nnnccyy」を取得するにはどうすればよいですか?

4

2 に答える 2

5

あなたがナノ秒(10億分の1)を求めているとしても、私はあなたがミリ秒(1000分の1)の精度を意味していると思います。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が内部でどのように機能するかはわかりませんが、調査でこの質問を見つけました。コードの実行にかかる時間を測定するための最良の方法は何ですか?基本的にはエリック・リッパートからのマネークォートを呼んでいると思いますDateTime.Now が、これが最も適切でした。

DateTimeで測定される「実時間」は、30ミリ秒程度しか正確ではないことに注意してください。DateTimeは、壁の時計や、ファイルを最後に編集した時刻などを表すためのものです。ナノ秒の精度である必要はないので、そうではありません

あなたがナノ秒の精度に行かなければならないなら、幸せな狩猟ですが、表現はそれをカットしません。@fegemoが示しているように、スクリプトタスクを使用すると、1,000万分の1のカスタムフォーマットを実行できますが、それでも、希望する精度から2桁離れています。

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 に答える