2011-01-25 19 views
0

こんにちは、私は以下の小さなクエリがあります。SUBSTRINGを使用したSql CASE文?

SELECT SubscriberDataId, 
     SUBSTRING(FacetsData, 5, 9) SubscriberCode, 
     SUBSTRING(FacetsData, 14, 35) SubscriberLastName, 
     SUBSTRING(FacetsData, 50, 15) SubscriberFirstName 
FROM Facets.FacetsImport 
WHERE DataIndicator = 'DEM1' 

を私は、このクエリでCaseステートメントを使用しようとしていますが、どのように知りません。私がしなければならないことは、上の3つのフィールドから無効なレコードを見つけなければならないということです。だから私は LEN(SubscriberCode) > 9(9はデータ型の長さ)を使用し、9より大きい場合はエラーテーブルに挿入します。な長さ35および15

を有する他の2列についても同様の文字列が入力文字列が64文字以上である場合にのみ、正しい長さを持つことになりますおかげ

+0

これは固定幅データをインポートしたものですか? – buzzwang

+0

あなたがここで行うことができるのは、 'FacetsData'の長さをチェックすることですか、何らかの方法で区切られていますか? –

+2

'SUBSTRING'を使用して列の長さを渡すので、' LEN(SubscriberCode)> 9 'を持つことはできません。 'SUBSTRING'の長さに9を使用しています。 – Lamak

答えて

0

INSERT 
INTO main_table 
SELECT SubscriberDataId, 
     SUBSTRING(FacetsData, 5, 9) SubscriberCode, 
     SUBSTRING(FacetsData, 14, 35) SubscriberLastName, 
     SUBSTRING(FacetsData, 50, 15) SubscriberFirstName 
FROM Facets.FacetsImport 
WHERE DataIndicator = 'DEM1' 
     AND LEN(FacetsData) >= 64 

INSERT 
INTO error_table 
SELECT SubscriberDataId, 
     SUBSTRING(FacetsData, 5, 9) SubscriberCode, 
     SUBSTRING(FacetsData, 14, 35) SubscriberLastName, 
     SUBSTRING(FacetsData, 50, 15) SubscriberFirstName 
FROM Facets.FacetsImport 
WHERE DataIndicator = 'DEM1' 
     AND (LEN(FacetsData) < 64 OR FacetsData IS NULL) 
+0

こんにちはQuassnoi、あなたのおかげで私はそれぞれの3つの列に検証を個別に適用する必要があります。フィールドのFacetsDataのサイズが65より小さい場合、それはレコード全体を挿入するでしょう。 main_tableでバリデーションを適用する必要がありますか? bczそこに私はそれぞれの3つのフィールドのレコードがあります。 – Programmer

+0

@Programmer:あなたの文字列が '64'以上であれば、3つのレコードすべてが正しい長さになります。短い場合、 'SUBSTRING(50,15)'は '15 '文字(エラー)より短くなります。長さの検証だけであれば十分でしょう。長さが '64'文字よりも小さければ、それは' error_table'にレコードを挿入します(あなたが実際のフィールドリストを省略したので、詳細を指定していないので)。 – Quassnoi

+0

こんにちはQuassnoi、私はそれについて私のチームリーダーに話し、彼は言った、私はsbstringを使用していると同じデータを使用して任意のフィールドとローディング作業テーブルを変換していません。私はインポートテーブルの検証を適用する必要があります。私は作業テーブルにそれを適用する必要があります。しかし、本当にありがとうございます。私は答えとしてマークします。ありがとう:) – Programmer

0

必要になります部分文字列は、要求されたバイト数まで部分文字列を渡すので、> 9、> 35、> 15を部分文字列でテストすることはできません。あなたは、データベースの外部の入力をチェックするか、これらのタイプのチェックを行うDB用のインポートツールがあるかどうかを確認する方が良いでしょう。