2012-10-15 17 views
2

以前我用過的:SUBSTRING和SUBSTR函數(SQL)有什麼區別?

entityManagerFactory.createQuery("select p FROM Pays p where SUBSTRING(p.libeleClient, 0,1) 

但是當我使用此查詢:

entityManagerFactory.createQuery("select p FROM Pays p where SUBSTR(p.libeleClient, 0,1) 

我得到一個異常:(

誰通過SUBSTR到remplace SUBSTRING

+0

什麼例外? – zmbq

+0

Oracle不支持'SUBSTRING'。 –

+0

不支持SUBSTRING功能! –

回答

4

SUBSTR是什麼?從Oracle

SUBSTRING功能是從MySQL

功能取決於DB烏爾其使用

編輯:

嘗試編輯像下面

String query = "select p FROM Pays p where SUBSTRING(p.libeleClient, 0,1)"; 


     // from Connection Object (connection) 
     DatabaseMetaData meta = connection.getMetaData(); 
     //If the DB is Oracle 
      if(meta.getDatabaseProductName()).contains("Oracle")) { 
       entityManagerFactory.createQuery(query.replace("SUBSTRING", "SUBSTR")); 
      }// If the DB not Oracle , any Other like MySql 
      else { 
       entityManagerFactory.createQuery(query); 
      } 
+0

但是誰可以使用基本功能? –

+0

在Java中,你必須在java中編寫一段代碼來識別你的數據庫,並據此來編輯你的sql查詢。 – NPKR

+0

我有代碼Java。但如何編輯sql查詢? –

0

你不說你得到了什麼異常Java代碼,但我猜測這是一個語法錯誤。 Oracle的SUBSTR正確的語法()是...

where SUBSTR(p.libeleClient, 0,1) = 'X' 

...(或其他)。這是單個角色的第一次出現必須相等;一些指定的值。 SUBSTR()不是布爾函數。

而SUBSTRING()不是一個Oracle的功能在所有。無論你是從其他數據庫借用語法,還是使用定製函數而沒有意識到它。


「我想你的建議,但它不工作」

你得到一個錯誤?或者你的意思是它不返回任何記錄?因爲我已經給出了完全有效的用法,as defined in the documentation。但是你沒有給出任何數據的例子,所以我幾乎不可能提供一個從數據庫返回行的解決方案。

+0

我試過你的建議,但它不起作用。但是當我使用這個SUBSTR(Label,-2)='A'時,我得到所有數據:( –

0

子是在SQL標準ISE定義的SQL操作:9075 IEC:1992。

SUBSTR由Oracle使用了舊的語法。這個錯誤的語法與真正的英文單詞的sql使用完全不一致,從不縮寫。

甲骨文仍然不支持標準的語法。

這兒還有沒有人寫過Oracle中的黑客來支持標準語法?

相關問題