簡體   English   中英

SUBSTRING和SUBSTR函數(SQL)有什么區別?

[英]what is the difference between SUBSTRING and SUBSTR functions (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的SUBSTRING?

SUBSTR是Oracle的函數

SUBSTRING是MySql的函數

取決於您使用的數據庫

編輯:

嘗試如下編輯您的Java代碼

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);
          }

您沒有說得到什么異常,但是我猜測這是一個語法錯誤。 Oracle的SUBSTR()的正確語法為...

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

...(管他呢)。 那是單個字符的第一次出現必須等於; 一些指定的值。 SUBSTR()不是布爾函數。

而SUBSTRING()根本不是oracle函數。 您或者是從其他數據庫借用了語法,或者您正在使用定制功能而沒有意識到它。


“我嘗試了您的建議,但是沒有用”

收到錯誤消息嗎? 還是說它不返回任何記錄? 因為我給出了文檔中定義的完全有效的用法。 但是您還沒有提供任何數據示例,因此對於我來說,幾乎不可能提供一種解決方案來從數據庫中返回行。

子字符串是sql標准ISE:IEC 9075:1992中定義的sql操作。

substr是oracle使用的舊語法。 這種錯誤的語法與真實英語單詞的sql用法完全不一致,從不縮寫。

Oracle仍然不支持標准語法。

是否有人在oracle中編寫了用於支持標准語法的hack?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM