欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

五種主流數據庫MySQL/Oracle/SQLServer/PostgreSQL/SQLite常用字符函數CHAR_LENGTH/CONCAT/INSTR/LOWER/OCTET_LENGTH/REPLACE/SUBSTRING/TRIM/UPPER

admin
2024年3月15日 14:56 本文熱度 708

SQL 字符函數用于字符數據的處理,例如字符串的拼接、大小寫轉換、子串的查找和替換等。

本文比較五種主流數據庫常用字符函數的實現和差異,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

字符函數函數功能MySQLOracleSQL ServerPostgreSQLSQLite
CHAR_LENGTH(s)返回字符串s包含的字符數量✔️LENGTH(s)LEN(s)✔️LENGTH(s)
CONCAT(s1, s2, …)連接字符串✔️✔️✔️✔️||
INSTR(s, s1)返回子串首次出現的位置✔️✔️PATINDEX(s1, s)POSITION(s1 IN s)✔️
LOWER(s)返回字符串s的小寫形式✔️✔️✔️✔️✔️
OCTET_LENGTH(s)返回字符串s包含的字節數量✔️LENGTHB(s)DATALENGTH(s)✔️
REPLACE(s, old, new)將字符串中的old替換為new✔️✔️✔️✔️✔️
SUBSTRING(s, n, m)返回從位置n開始的m個字符✔️SUBSTR(s, n, m)✔️✔️✔️
TRIM(s1 FROM s)刪除字符串開頭和結尾的子串✔️✔️✔️✔️TRIM(s, s1)
UPPER(s)返回字符串s的大寫形式✔️✔️✔️✔️✔️

下面我們通過一些示例來說明這些函數的作用和注意事項。

字符串的長度

字符串的長度可以按照兩種方式進行計算:字符數量和字節數量。在多字節編碼中,一個字符可能占用多個字節。

CHAR_LENGTH(s) 函數用于計算字符串中的字符數量,OCTET_LENGTH(s) 函數用于計算字符串包含的字節數量。例如:

-- MySQL 和 PostgreSQL
SELECT CHAR_LENGTH('數據庫'), OCTET_LENGTH('數據庫');

查詢返回的結果如下:

CHAR_LENGTH('數據庫')|OCTET_LENGTH('數據庫')
--------------------|---------------------
                  3| 9

字符串“數據庫”包含 3 個字符,在 UTF-8 編碼中占用 9 個字節。MySQL 和 PostgreSQL 實現了這兩個標準函數。

Oracle 使用 LENGTH(s) 函數和 LENGTHB 函數計算字符數量和字節數量,例如:

-- Oracle
SELECT LENGTH('數據庫'), LENGTHB('數據庫')
FROM dual;

查詢返回的結果和上面的示例相同。

提示:PostgreSQL 也提供了 LENGTH(s) 函數,用于返回字符串中的字符數量。MySQL 也提供了 LENGTH(s) 函數,用于返回字符串中的字節數量。

Microsoft SQL Server 使用 LEN(s) 函數和 DATALENGTH(s) 函數計算字符數量和字節數量,例如:

-- SQL Server
SELECT LEN('數據庫'), DATALENGTH('數據庫');

查詢返回的結果如下:

LEN|DATALENGTH
---|----------
 3| 6

字符串“數據庫”在“Chinese_PRC_CI_AS”字符集中占用 6 個字節,每個漢字占用 2 個字節。

SQLite 只提供了 LENGTH(s) 函數,用于計算字符串中的字符個數,例如:

-- SQLite
SELECT LENGTH('數據庫');

查詢返回的結果如下:

LENGTH('數據庫')
--------------
3

連接字符串

CONCAT(s1, s2, …) 函數將兩個或者多個字符串連接到一起,組成一個新的字符串。例如:

-- MySQL、Microsoft SQL Server 以及 PostgreSQL
SELECT CONCAT('S', 'Q', 'L');

查詢返回的結果如下:

CONCAT('S', 'Q', 'L')
---------------------
SQL

Oracle 中的 CONCAT 函數一次只能連接兩個字符串,例如:

SELECT CONCAT(CONCAT('S', 'Q'), 'L')
FROM dual;

我們通過嵌套函數調用連接多個字符串,查詢返回的結果和上面的示例相同。

SQLite 沒有提供連接字符串的函數,可以通過連接運算符(||)實現字符串的連接。例如:

-- SQLite、Oracle 以及 PostgreSQL
SELECT 'S' || 'Q' || 'L';

查詢返回的結果和上面的示例相同。

提示:Oracle 和 PostgreSQL 也提供了連接運算符(||),Microsoft SQL Server 使用加號(+)作為連接運算符。

除 CONCAT 函數外,還有一個 CONCAT_WS(separator, s1, s2 , … ) 函數,可以使用指定分隔符連接字符串。例如:

-- MySQL、Microsoft SQL Server 以及 PostgreSQL
SELECT CONCAT_WS('-','S', 'Q', 'L');

查詢返回的結果如下。

CONCAT_WS('-','S', 'Q', 'L')
----------------------------
S-Q-L

MySQL、Microsoft SQL Server 以及 PostgreSQL 實現了該函數。

大小寫轉換

LOWER(s) 函數將字符串轉換為小寫形式,UPPER(s) 函數將字符串轉換為大寫形式。例如:

SELECT LOWER('SQL'), UPPER('sql')
FROM employee
WHERE emp_id = 1;

查詢返回的結果如下:

LOWER('SQL')|UPPER('sql')
------------|------------
       sql |SQL

提示:MySQL 中的 LCASE 函數等價于 LOWER 函數,UCASE 函數等價于 UPPER 函數。Oracle 和 PostgreSQL 還提供了首字母大寫的 INITCAP 函數。

獲取子串

SUBSTRING(s, n, m) 函數返回字符串 s 中從位置 n 開始的 m 個字符子串。例如:

-- MySQL、Microsoft SQL Server、PostgreSQL 以及 SQlite
SELECT SUBSTRING('數據庫', 1, 2);

查詢返回的結果如下:

SUBSTRING('數據庫', 1, 2)
-----------------------
數據

Oracle 使用簡寫的 SUBSTR(s, n, m) 函數返回子串,例如:

-- Oracle、MySQL、PostgreSQL 以及 SQLite
SELECT SUBSTR('數據庫', 1, 2)
FROM dual;

MySQL、PostgreSQL 以及 SQLite 也支持 SUBSTR 函數。查詢結果和上面的示例相同。

另外,Oracle、MySQL 以及 SQLite 中的起始位置 n 可以指定負數,表示從字符串的尾部倒數查找起始位置,然后再返回子串。例如:

-- Oracle、MySQL 以及 SQLite
SELECT SUBSTR('數據庫', -2, 2)
FROM employee
WHERE emp_id = 1;

查詢返回的結果如下。

SUBSTR('數據庫', -2, 2)
---------------------
據庫

其中,-2 表示從右往左數第 2 個字符(“據”),然后再返回 2 個字符。

提示:MySQL、Microsoft SQL Server 以及 PostgreSQL 提供了 LEFT(s, n) 和 RIGHT(s, n) 函數,分別用于返回字符串開頭和結尾的 n 個字符。

子串查找與替換

INSTR(s, s1) 函數查找并返回字符串 s 中子串 s1 第一次出現的位置。如果沒有找到子串,則會返回 0。例如:

-- Oracle、MySQL 以及 SQLite
SELECT email, INSTR(email, '@')
FROM employee
WHERE emp_id = 1;

查詢返回的結果如下:

email |INSTR(email, '@')
-----------------|-----------------
liubei@shuguo.com| 7

“@”是字符串“liubei@shuguo.com”中的第 7 個字符。

Microsoft SQL Server 使用 PATINDEX(s1, s) 函數查找子串的位置,例如:

-- Microsoft SQL Server
SELECT email, PATINDEX('%@%', email)
FROM employee
WHERE emp_id = 1;

其中,s1 參數的形式為 %pattern%,類似于 LIKE 運算符中的匹配模式。查詢返回的結果和上面的示例相同。

PostgreSQL 使用 POSITION (s1 IN s) 函數查找子串的位置,例如:

-- PostgreSQL
SELECT email, POSITION('@' IN email)
FROM employee
WHERE emp_id = 1;

查詢返回的結果和上面的示例相同。

REPLACE(s, old, new) 函數將字符串 s 中的子串 old 替換為 new。例如:

SELECT email, REPLACE(email, 'com', 'net')
FROM employee
WHERE emp_id = 1;

查詢返回的結果如下:

email |REPLACE(email, 'com', 'net')
-----------------|----------------------------
liubei@shuguo.com|liubei@shuguo.net

REPLACE 函數在 5 種主流數據庫中的實現一致。

截斷字符串

TRIM(s1 FROM s) 函數刪除字符串 s 開頭和結尾的子串 s1。例如:

-- Oracle、MySQL、Microsoft SQL Server 以及 PostgreSQL
SELECT TRIM('-' FROM '--S-Q-L--'), TRIM(' S-Q-L ')
FROM employee
WHERE emp_id = 1;

第一個函數刪除了開頭和結尾的“-”;第二個函數省略了 s1 子串,默認表示刪除開頭和
結尾的空格。查詢返回的結果如下:

TRIM('-' FROM '--S-Q-L--')|TRIM(' S-Q-L ')
--------------------------|-----------------
S-Q-L                     |S-Q-L

Oracle 中的參數 s1 只能是單個字符,其他數據庫中的參數 s1 可以是多個字符。

SQLite 中的 TRIM(s, s1) 函數的調用格式與其他數據庫不同,例如:

-- SQLite
SELECT TRIM('--S-Q-L--', '-'), TRIM(' S-Q-L ');

查詢返回的結果和上面的示例相同。

提示:LTRIM(s)函數可以刪除字符串開頭的空格,RTRIM(s)函數可以刪除字符串尾部的空格,這兩個函數是 TRIM 函數的簡化版。


該文章在 2024/3/15 14:56:27 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved