2014-12-25 18 views
4

我需要join兩個表上柱,其在一個表被定義爲字符串並且在其它如整數工作。在兩欄中存儲的實際數據是整數。這是設計給我的 - 我無法改變這一點。SQL JOIN上串=整數在任何RDBMS

所以,當我加入MySQL是好的 - 它無聲地進行轉換。 PostgreSQL抱怨。有CAST運營商,我可以添加到查詢有字符串轉換爲整數,但CAST函數是在不同的RDBMS中定義不同。

我可以用它在所有(或許多)RDBMS中工作的方式編寫此查詢嗎?或者,有沒有數據庫抽象層,可以爲我做到這一點? ADODB已在項目中使用,但我無法看到它是否以及如何有助於解決此問題。

謝謝。

+1

'CAST(expr AS type)'是ANSI SQL,應該可以在所有RDBMS中工作 – zerkms

+0

這就是它在MySQL中定義的方式:CAST(VAR AS UNSIGNED)並且在PostgreSQL中:CAST(VAR AS INTEGER) – aavagyan

+1

爲什麼不在mysql中使用'INTEGER'類型呢? – zerkms

回答

1

既然你可以在每個數據庫的相同方式不CASTINT由於數據類型,你可以投你的數字領域CHAR

CAST(a.numeric_Field AS CHAR(5))` = b.stringfield 

這將PostgreSQL的,MySQL和SQL服務器上工作,不確定其他人。

+0

我會試一試並報告回來。這並不理想,因爲:a)加入'字符串'列/值比整數慢b)實際數據是整數,所以這是相當「錯誤」的做事方式。 – aavagyan

+0

這確實有效。查詢性能更差2倍,我沒有發現重寫它的速度更快的可能性,但是這 - 至少 - 起作用。謝謝! – aavagyan

+0

確實,不理想,只是一個醜陋的解決方法。 –