2014-01-07 18 views
0

我有兩個模型ProductRetailerProduct。我想建立一個one-to-one這個模型之間的關係。關係邏輯很複雜,它會吃掉所有的表現。所以,我們決定在批處理作業中填寫retailer_product_idproducts表。從模型屬性的兩側刪除比較時的前導零

問題是,我們有一個條件,我們必須匹配products.matching_dataretailer_products.matching_code。這兩個表都在某些情況下包含前導零,我們希望忽略前導零。出於某種原因,我無法更改列的數據類型。

問題是下面的查詢只從一側刪除零。我想在兩邊被刪除。

retailer_products = RetailerProduct.find(11223) // just initialising retailer_product variable 
Product.where matching_data: retailer_products.matching_code.sub(/^[0:]*/,"") 

例如,上面的查詢將失敗,下面的數據。它只會匹配一行,但邏輯上這兩行匹配。

Retailer_product表

retailer_products | matching_code 
1     | "0123a" 
2     | "139" 

產品表

products   | matching_data 
1     | "123a" 
2     | "0139" 
+0

爲什麼不修剪從數據本身的前導零,並確保東西留在未來的道路? –

+0

,因爲不幸的是,前導零在其他條件和其他模型中很重要。 –

回答

1

在SQL級別:

trim(leading '0' FROM '01390'); 

trim是SQL標準的功能,使的Ruby/Rails可能提供了一種方法在查詢構建過程中調用它。

這樣你就可以編寫明智的連接條件。我不能Rails的IFY它(不要說話Rails的),但在SQL,像:

SELECT * 
FROM product p 
INNER JOIN retailer_product rp ON (trim(leading '0' from rp.matching_data) = trim(leading '0' from p.matching_data)); 
+0

這個工程。謝謝。只有,你刪除了多餘的括號,多個表名,並使用'leading'而不是'both'。 –

+0

我誤解了你的陳述「問題是下面的查詢只能從一邊刪除零,我想在兩邊被刪除。」是啊。顯然你不想從數字的兩邊刪除零。定影。至於多表名:如果你想要精確的可運行SQL,**發佈你的表定義**(SQLFiddle.com對此很有用)。否則,我們會猜測細節。 –