2017-01-04 13 views
0

私は、4つの重要なデータカラムを持つテーブルを持っています。 CusNo、説明、年、および週。すべての列データ型はCHARであり、変更することはできません。データのカラムを比較してデータエラーをチェックする

形式は週列の値は、上記の最後の値に示すように、私たちのレポートが不足している週表示させるmiskeyedされ、時折

CusNo Description  Year Week 
C2134 ROY WK 41, 2016 2016 41 
C1152 ROY WK 41, 2016 2016 41 
C1589 ROY WK 41, 2016 2016 41 
C1921 ROY WK 41, 2016 2016 40 

です。この特定のケースでは、会社C1921の報告書は、実際に「week」列に誤って入力された週41、行方不明であることを示します。

説明列のデータと週列を比較して、その週の値が同じ週であるかどうかを確認する方法はありますか?私が取り組んでいる問題は、記述の第1週〜第9週は1桁(1,2,3 ...)ですが、週の列では常に2桁(01、02、03 ...)です)。経理チームが理由によりこの形式を使用するため、データの変更は実現不可能です。

+1

が 'ウィーク列の値が原因miskeyedされます私たちの報告書は、欠落している週を示しています。これをフロントエンドで処理する方法はありませんか? –

答えて

1

一つの方法は次のとおりです。

SELECT Description, 
     RIGHT(Description,4) [Year], 
     SUBSTRING(Description,8,CHARINDEX(',',Description)-8) [Week] 
FROM dbo.YourTable 

あなたはそれをゼロを前に付ける必要がある場合は、:

SELECT Description, [Year], RIGHT('0'+[Week],2) [Week] 
FROM (
SELECT Description, 
     RIGHT(Description,4) [Year], 
     SUBSTRING(Description,8,CHARINDEX(',',Description)-8) [Week] 
FROM dbo.YourTable) X; 
+0

文字列の長さに基づいてこれらを1つのステートメントに結合する方法はありますか?説明の週に0が必要な場合、15とは対照的に、長さは14です。 – d90

+0

@ d90私はあなたがこの説明で週間が1〜9週間の一桁であると言ったと思っていましたが、これはそのために働くはずです – Lamak

+0

はい、私はしました。私は自分の考えを紙に正しく載せていないと思う。私は週1から52まで機能する単一のクエリを作成し、必要に応じてゼロを追加することが可能かどうかを尋ねてきます。 – d90

0

その週の列挙された値が同じ週に本質的に

SELECT t.* FROM table AS t INNER JOIN tables AS d ON t.description LIKE 'ROY WK ' + d.week +'%'

この選択をしているかどうかを確認するために、週に 列を記述欄のデータを比較する方法はありますステートメントは、自分自身で自己結合を行い、ROY WK 41ワイルドカードのようなすべての説明を探します。ユーザが脂肪指であるので、これは偽陽性につながる可能性がある。 description列から一年と週を取得する

関連する問題