Oracle和Mysql中的字符串的拼接


SQL允許兩個或者多個字段之間進行計算,字符串類型的字段也不例外。比如我們需要 以“工號+姓名”的方式在報表中顯示一個員工的信息,那么就需要把工號和姓名兩個字符 串類型的字段拼接計算;再 如 我們需要在報表中在每個員工的工號前增加“Old”這個文本。 這時候就需要我們對字符串類型的字段(包括字符串類型的常量字段)進行拼接。在不同的 數據庫系統下的字符串拼接是有很大差異的,因此這里我們將講解主流數據庫下的字符串拼 接的差異。

Mysql

在Java、C#等編程語言中字符串的拼接可以通過加號“+”來實現,比如: "1"+"3"、 "a"+"b"。 在MYSQL中也可以使用加號“+”來連接兩個字符串,比如下面的SQL:

 SELECT '12'+'33',FAge+'1' FROM T_Employee  

執行完畢我們就能在輸出結果中看到下面的執行結果:

仔細觀察第一列,驚訝嗎?這個列的顯示結果並不是我們希望的“1233” ,而是把“12” 和“33”兩個字符串當成數字來求兩個數的和了;同樣將一個數字與一個字符串用加號“+” 連接也是同樣的效果,比如這里的第二列。

在MYSQL中,當用加號“+”連接兩個字段(或者多個字段)的時候,MYSQL會嘗試將 字段值轉換為數字類型(如果轉換失敗則認為字段值為0),然后進行字段的加法運算。因此, 當計算的'12'+'33'的時候,MYSQL會將“12”和“33”兩個字符串嘗試轉換為數字類型的 12和33,然后計算12+33的值,這就是為什么我們會得到45的結果了。同樣道理,在計算 FAge+'1'的時候,由於FAge為數字類型,所以不需要進行轉換,而'1'為字符串類型,所以 MYSQL將'1'嘗試轉換為數字1,然后計算FAge+1做為計算列的值。

MYSQL會嘗試將加號兩端的字段值嘗試轉換為數字類型,如果轉換失敗則認為字段值為 0,比如我們執行下面的SQL語句:

SELECT 'abc'+'123',FAge+'a' FROM T_Employee 

執行完畢我們就能在輸出結果中看到下面的執行結果:

在MYSQL中進行字符串的拼接要使用CONCAT函數,CONCAT函數支持一個或者多個參數, 參數類型可以為字符串類型也可以是非字符串類型,對於非字符串類型的參數MYSQL將嘗試 將其轉化為字符串類型,CONCAT函數會將所有參數按照參數的順序拼接成一個字符串做為 返回值。比如下面的SQL語句用於將用戶的多個字段信息以一個計算字段的形式查詢出來:
SELECT CONCAT('工號為:',FNumber,'的員工的幸福指數:',FSalary/(FAge-21)) FROM T_Employee 執行完畢我們就能在輸出結果中看到下面的執行結果:

CONCAT支持只有一個參數的用法,這時的CONCAT可以看作是一個將這個參數值嘗試轉 化為字符串類型值的函數。MYSQL中還提供了另外一個進行字符串拼接的函數CONCAT_WS, CONCAT_WS可以在待拼接的字符串之間加入指定的分隔符,它的第一個參數值為采用的分 隔符,而剩下的參數則為待拼接的字符串值

Oracle

Oracle中使用“||”進行字符串拼接,比如執行下面的SQL語句:

SELECT '工號為'||FNumber||'的員工姓名為'||FName FROM T_Employee WHERE FName IS NOT NULL 

執行完畢我們就能在輸出結果中看到下面的執行結果:

除了“||”, Oracle還支持使用CONCAT()函數進行字符串拼接,比如執行下面的SQL語句:

SELECT CONCAT('工號:',FNumber) FROM T_Employee 

執行完畢我們就能在輸出結果中看到下面的執行結果

如果CONCAT中連接的值不是字符串,Oracle會嘗試將其轉換為字符串.

與MYSQL的CONCAT()函數不同,Oracle的CONCAT()函數只支持兩個參數,不支持兩個以 上字符串的拼接,比如下面的SQL語句在Oracle中是錯誤的:

SELECT CONCAT('工號為',FNumber,'的員工姓名為',FName) FROM T_Employee WHERE FName IS NOT NULL 

運行以后Oracle會報出下面的錯誤信息: 參數個數無效

如果要進行多個字符串的拼接的話,可以使用多個CONCAT()函數嵌套使用,上面的SQL可以如:

SELECT CONCAT(CONCAT(CONCAT('工號為',FNumber),'的員工姓名為'),FName) FROM T_Employee WHERE FName IS NOT NULL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM