共計 1868 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要為大家展示了“SQL 中字符串拼接的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“SQL 中字符串拼接的示例分析”這篇文章吧。
一、概述
相信大家在日常開發中,在 SQL 語句中經常需要進行字符串拼接,以 sqlserver,oracle,mysql 三種數據庫為例,因為這三種數據庫具有代表性。
sqlserver:
select 123 + 456
oracle:
select 123 || 456 from dual;
或
select concat(123 , 456
) from dual;
mysql:
select concat(123 , 456
注意:SQL Server 中沒有 concat 函數(SQL Server 2012 已新增 concat 函數)。oracle 和 mysql 中雖然都有 concat,但是 oracle 中只能拼接 2 個字符串,所以建議用 || 的方式;mysql 中的 concat 則可以拼接多個字符串。
在 SQL Server 中的“+”號除了能夠進行字符串拼接外,還可以進行數字運算,在進行字符串拼接時要小心使用。下面以“Users”表為例,進行詳細分析:
二、數字 + 字符串
2.1 int + varchar
SELECT id + place FROM Users WHERE id = 1; // 提示錯誤“在將 varchar 值 bzz 轉換成數據類型 int 時失敗”SELECT id + place FROM Users WHERE id = 5; // 提示錯誤“在將 varchar 值 102.34 轉換成數據類型 int 時失敗”
SELECT id + place FROM Users WHERE id = 4; // 返回 int “105”
2.2 decimal + varchar
SELECT *, id + cost FROM Users WHERE id = 4 OR id = 5; // 返回 decimal “102.98”和“104.30”
SELECT *, place + cost FROM Users WHERE id = 1; // 提示錯誤“從數據類型 varchar 轉換為 numeric 時出錯。”
由此可見,系統會將字符串 varchar 類型轉化為 int,若不能轉換則提示錯誤,轉換成功則進行數字計算。
三、數字 + 數字
數字指的是 int、decimal 等類型。數字 + 數字,則進行數字相加,若某字段為 NULL,則計算結果為 NULL。
SELECT *, uage + cost AS uage + cost FROM Users
四、字符串 + 字符串
字符串 + 字符串,則直接進行拼接。若某字段為 NULL,則計算結果為 NULL。
SELECT *, uname + place AS uname + place FROM Users
五、使用 CAST 和 CONVERT 函數進行類型轉換
通過上述實例,可以看出若要使用“+”進行字符串拼接或數字計算,最穩妥的方法是進行類型轉換。
CAST() 函數可以將某種數據類型的表達式轉化為另一種數據類型
CONVERT() 函數也可以將制定的數據類型轉換為另一種數據類型
要求:將“678”轉化為數值型數據,并與 123 相加進行數學運算。
SELECT CAST(678 AS INT) + 123;
SELECT CONVERT(INT, 678) + 123;
要求:id 列和 place 列進行字符串拼接。
SELECT *, CONVERT(varchar(10), id) + place FROM Users;
字符串拼接后的字符串不能簡單作為“篩選字段”
有時,需要列 A = 變量 1,列 B = 變量 2 的篩選,為了簡化 SQL 語句 列 A + 列 B = 變量 1 + 變量 2。這種方法并不完全準確
SELECT * FROM Users WHERE uname + place = aabzz
SELECT * FROM Users WHERE uname = aa AND place = bzz
為了防止上述情況的發生,可以再列 A 和列 B 之間加上一個較特殊的字符串。
SELECT * FROM Users WHERE uname + rain@ %$man + place = aa + rain@ %$man + bzz
以上是“SQL 中字符串拼接的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!