1

データの一貫性のために列チェックを実行する必要があり、コードをスローしているのは、特定のパラメーター間の日付の文字長をチェックすることだけです。

SEL
sum(case when ( A.date is  null or (character_length(A.date) >8)) then 1 else 0 end ) as Date
from
table A
;

列の日付形式は YYYY-MM-DD で、タイプは DA です。SQL アシスタントでスクリプトを実行すると、エラー 3580「CHARACTERS、MCHARACTERS、または OCTET_LENGTH 関数の不正な使用」が表示されます。

予備調査では、SQL アシスタントには character_length 関数に問題があることが示唆されていますが、コードを調整して実行する方法がわかりません。

4

1 に答える 1

2

チャレターの長さで、メモリを使用しようとしていますか? もしそうなら、それは日付フィールドに対して一定であるためです。文字列表現の長さを取得しようとしている場合は、LENGTH(A.date)十分だと思います。残念ながら、teradata は文字列への変換時にゼロを埋め込むため、これは常に 10 を返す可能性があると思います。

アップデート :

出力時に特別な「形式」で日付が必要な場合は、適切に選択する必要があります。Teradata では、ほとんどの DB と同様に、日付は文字列ではなく、データベースの特定の「エポック」日付 (たとえば、エポックは 01/01/0000) からの日数をカウントする整数として格納されます。Teradata の各日付タイプには、選択時に出力をフォーマットする方法に関する指示をレコード ヘッダーに配置するフォーマット パラメータがあります。デフォルトでは、日付形式はこれに設定されているDATE FROMAT 'MM/DD/YYYY'と思います。キャストすることで変更できます。

試してみてくださいSELECT cast(cast(A.date as DATE FORMAT 'MM-DD-YYYY') as CHAR(10)) FROM A。そして何が起こるか見てください。形式が正しいかどうかを確認するために、小さなサンプルを過ぎた日付の形式を検証する必要はありません。2 番目のキャストは、データベースに強制的に変換を実行させ、指定されたフォーマット ヘッダーを使用させます。それ以外の場合は、データベースが日付を日付形式で SQL アシスタントに渡し、SQL アシスタントがアプリケーション レベルで変換を実行し、データベースに設定されている形式ではなく、独自の設定で指定されている形式を使用します。

于 2012-11-13T17:41:45.033 に答える