0

Crystal Reports 2008を使用して、テキストフィールドから日付を抽出する必要があります。この日付は通常、dd / mm / yyの形式ですが、d / m / yy、dd / m/yyyyなどのように入力することもできます。

この日付は、文字列内のどこにでも表示される可能性があります。

現時点では、日付が文字列の最後に配置され、後続のフルストップがなく、LEFT/RIGHTを使用して各日付部分を抽出しているという事実に依存しています。次に、これらの部分は別の数式に渡され、完全な日付が作成されます。

Dim AllocationDate()as Date If Not(IsNull({Command.Notes}))then Formula = DateValue((ToNumber({@Year}))、(ToNumber({@Month}))、(ToNumber({@Day} ))))

ただし、誰かがさまざまな形式を使用している場合は、レポート全体が確認された日付の後に終止符またはそれ以上のメモを追加します。

パターンを探してこの日付を抽出する方法はありますか?TRIMを使用して、形式の不整合を回避できると思います。

tyvmia

4

2 に答える 2

1

正規表現の使用を検討することをお勧めします。

Crystal Reportsは正規表現をネイティブでサポートしていないため、UFLを追加する必要があります。CrystalReports:Crystal Reportsで正規表現を行う方法はありますか?

この質問のパターンをニーズに合わせて調整できるはずです:Javascript date regex DD / MM / YYYY

最後に、 regexpal.comを使用してテキストのパターンをテストできます。

** 編集 **

SQL式フィールド(Oracle 10構文)を作成して、日付文字列を抽出し、それを日付フィールドに変換します。

// {%Allocation Date}
(
  -- match date-like string, then convert to date type; is no dates are found, NULL is returned
  TO_DATE( REGEXP_SUBSTR( TABLE.FIELD, '\d{1,2}\/\d{1,2}\/\d{2,4}',1 ,1), 'dd/mm/yyyy')
)

あなたができる間

于 2012-08-01T11:50:01.417 に答える
0

そして、最後の手段として、CR、LFなどを表す特殊文字を置き換えることにより、複数行の文字列を長い文字列に変換してみることができます。それらをスペースまたは別の無害な文字に置き換えて、結果の文字列を次のように扱います。それは単なる通常の文字列でした(日付が中央にあります)。

これを可能にするには、いくつかの仮定を行う必要があります。文字列ごとに1つの日付、すべての特殊文字がわかっている(または、すべての可能な特殊文字をテストする必要がある)、日付が形式にある程度準拠しているなどです。

于 2012-08-07T22:53:52.430 に答える