2011-10-10 46 views
1

我想爲上述三個DBMS使用相同的sql語句..但問題是它有字符串連接涉及但每個dbms中有不同的方式進行連接操作。 。但我想要單個操作員..需要別人的幫助相同的SQL連接opeartor爲mysql,mssql,oracle

+1

不太可能發生,但一個例子你想要什麼/ wanting會有幫助 –

+0

Denali具有'CONCAT'功能,但在此之前在TSQL中,您被'+' –

+0

卡住了嗎?是否可以在sql server中定義concat函數..與mysql中的CONCAT相同,oracle –

回答

3

你也許可以在你的應用程序代碼中使用佔位符來連接你的sql語句,然後用正確的rdbms樣式代替它使用:

select {conpre} myfield1 {conmid} myfield2 {conmid} myfield3 {conend} 
    from mytable 

然後,在僞碼:

if rdbms is sqlserver 
    conpre = "" 
    conmid = " + " 
    conend = "" 
else if rdbms is mysql 
    conpre = "concat(" 
    conmid = ", " 
    conend = ")" 
else if rdbms is oracle 
    conpre = "" 
    conmid = " || " 
    conend = "" 
else if 
    ' etc... 
end if 

stmt = replace(stmt, "{conpre}", conpre) 
stmt = replace(stmt, "{conmid}", conmid) 
stmt = replace(stmt, "{conend}", conend) 
+0

對不起...它是不是我期望的答案如果這是...那麼我爲什麼不在編程中處理這個問題.. –

+2

對於你的「問題」的正確答案是「否」。只是想我會提供另一個建議,更有幫助。 – mellamokb

+0

這是可能的,我想。看到我的答案。 –

1

我會避免編寫自己的解決方案,並使用已有的多數據庫工具之一。如果您遇到此問題,一旦您很快會再次遇到此問題。

我不附屬於以下,但你可以嘗試Datanamic Multirun

1

答案很簡單,這個問題似乎沒有。

但是...

如果您在Oracle中創建軟件包dbo,該怎麼辦? 在一個名爲dbo的單獨數據庫中創建一個名爲concat的函數時,是不是也可以使用dbo.concat(a,b,c)來調用函數?

不幸的是,MySQL不支持默認參數(除非最近更改)或函數重載,所以你必須創建函數的參數每個號碼:

concat2(S1,S2)

concat3(s1,s2,s3)

等等。

1

有這樣使用ODBC轉義序列

SELECT {fn concat (col1, {fn concat (col2, col3)})} 
FROM YourTable 

my current understanding這將在SQL Server和MySQL做工精細的方式,但對於甲骨文取決於連接方法。

+0

+1哇!我從來沒有聽說過這些。好主意! – mellamokb

+0

但是,這隻會通過ODBC連接,對不對? –

+1

@a_horse_with_no_name - 我不完全清楚。在SQL Server中,似乎連接不可知。你可以在定義中用這個創建一個存儲過程,並且它在文本中用'fn concat'緩存一個計劃,而不是在驅動程序到達SQL Server之前被它重寫。稍後我可能會在dba.stackexchange.com上發佈一個關於它的問題 –

0

MySQL的:

SELECT CONCAT('New ', 'York ', 'City'); 

輸出是:紐約市

甲骨文:

SELECT 'The city' || ' is ' || 'Paris' FROM dual; 

輸出是:這個城市是巴黎

SQL服務器:

SELECT 'The city' + ' is ' + 'Paris'; 

輸出是:這個城市是巴黎

SELECT CONCAT('The city', ' is ', 'Paris'); 

輸出是:這個城市是巴黎