2011-12-22 5 views
-1

2つのデータセットの先頭とゼロを比較するのに問題があります。
000000000000909120のようにInventory_NBPがあります。
ただし、PDM_Analysisには、先頭に0がない909120しか存在しません。
"IN"条件が満たされていないため、以下の現在のクエリで000000000000909120または909120が取得できませんでした。SQL 2の比較で2番目のレコードセットを導く

要件を満たすために以下のクエリを変更するにはどうすればよいですか?

sel * FROM Inventory_NBP.v_dmnd_rsrv_dpnd_rqr_mrp 
WHERE plnt_id ='WA01' 
and mtrl_id in('G29329-001', '000000000000909120', '13-0006-001') 
and 
(mtrl_id, plnt_id) 
     IN 
     ( SELECT itm_cd, sap_plnt_cd 
      FROM PDM_Analysis.v_itm_plnt_extn 
    ) 
+0

あなたの質問は、関連するテーブルのテーブルスキーマ定義を更新してください。 –

+0

サーバがサポートしている場合、正規表現を試してみることができます。例えば'...とmtrl_id REGEXP( '^(G29329-001 | 0 * 909120 | 13-0006-001)$')' –

+0

申し訳ありません、私のサーバはこれをサポートしていません – VeecoTech

答えて

0

キャストしてください。これはあなたの問題を解決するかもしれません。チェックしてください。ここで

SELECT * FROM Inventory_NBP.v_dmnd_rsrv_dpnd_rqr_mrp 
WHERE plnt_id ='WA01' 
and mtrl_id in('G29329-001',CAST(CAST('000000000000909120' AS INT) AS VARCHAR(10)), '13-0006-001') 
and 
(mtrl_id, plnt_id) 
     IN 
     ( SELECT itm_cd, sap_plnt_cd 
      FROM PDM_Analysis.v_itm_plnt_extn 
    ) 
0

は、パディング(SQL Server 2008の構文)により関わらず、先行ゼロの値と一致する方法の例です:

WITH T1 
    AS 
    (
     SELECT * 
     FROM (
       VALUES ('000000000000909120'), 
        ('00000000099'), 
        ('000000055'), 
        ('22'), 
        ('152') 
      ) AS T (data_col) 
    ), 
    T2 
    AS 
    (
     SELECT * 
     FROM (
       VALUES ('909120'), 
        ('99'), 
        ('00055'), 
        ('0000000022'), 
        ('152') 
      ) AS T (data_col) 
    )  
SELECT * 
    FROM T1 INNER JOIN T2 
      ON T1.data_col 
       = REPLICATE('0', LEN(T1.data_col) - LEN(T2.data_col)) 
        + T2.data_col 
UNION 
SELECT * 
    FROM T1 INNER JOIN T2 
      ON T2.data_col 
       = REPLICATE('0', LEN(T2.data_col) - LEN(T1.data_col)) 
        + T1.data_col;