狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

SQL 字符函數(shù)用于字符數(shù)據(jù)的處理,例如字符串的拼接、大小寫轉(zhuǎn)換、子串的查找和替換等。

本文比較五種主流數(shù)據(jù)庫(kù)常用字符函數(shù)的實(shí)現(xiàn)和差異,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

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

下面我們通過(guò)一些示例來(lái)說(shuō)明這些函數(shù)的作用和注意事項(xiàng)。

字符串的長(zhǎng)度

字符串的長(zhǎng)度可以按照兩種方式進(jìn)行計(jì)算:字符數(shù)量和字節(jié)數(shù)量。在多字節(jié)編碼中,一個(gè)字符可能占用多個(gè)字節(jié)。

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

-- MySQL 和 PostgreSQL
SELECT CHAR_LENGTH('數(shù)據(jù)庫(kù)'), OCTET_LENGTH('數(shù)據(jù)庫(kù)');

查詢返回的結(jié)果如下:

CHAR_LENGTH('數(shù)據(jù)庫(kù)')|OCTET_LENGTH('數(shù)據(jù)庫(kù)')
--------------------|---------------------
                  3| 9

字符串“數(shù)據(jù)庫(kù)”包含 3 個(gè)字符,在 UTF-8 編碼中占用 9 個(gè)字節(jié)。MySQL 和 PostgreSQL 實(shí)現(xiàn)了這兩個(gè)標(biāo)準(zhǔn)函數(shù)。

Oracle 使用 LENGTH(s) 函數(shù)和 LENGTHB 函數(shù)計(jì)算字符數(shù)量和字節(jié)數(shù)量,例如:

-- Oracle
SELECT LENGTH('數(shù)據(jù)庫(kù)'), LENGTHB('數(shù)據(jù)庫(kù)')
FROM dual;

查詢返回的結(jié)果和上面的示例相同。

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

Microsoft SQL Server 使用 LEN(s) 函數(shù)和 DATALENGTH(s) 函數(shù)計(jì)算字符數(shù)量和字節(jié)數(shù)量,例如:

-- SQL Server
SELECT LEN('數(shù)據(jù)庫(kù)'), DATALENGTH('數(shù)據(jù)庫(kù)');

查詢返回的結(jié)果如下:

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

字符串“數(shù)據(jù)庫(kù)”在“Chinese_PRC_CI_AS”字符集中占用 6 個(gè)字節(jié),每個(gè)漢字占用 2 個(gè)字節(jié)。

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

-- SQLite
SELECT LENGTH('數(shù)據(jù)庫(kù)');

查詢返回的結(jié)果如下:

LENGTH('數(shù)據(jù)庫(kù)')
--------------
3

連接字符串

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

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

查詢返回的結(jié)果如下:

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

Oracle 中的 CONCAT 函數(shù)一次只能連接兩個(gè)字符串,例如:

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

我們通過(guò)嵌套函數(shù)調(diào)用連接多個(gè)字符串,查詢返回的結(jié)果和上面的示例相同。

SQLite 沒(méi)有提供連接字符串的函數(shù),可以通過(guò)連接運(yùn)算符(||)實(shí)現(xiàn)字符串的連接。例如:

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

查詢返回的結(jié)果和上面的示例相同。

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

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

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

查詢返回的結(jié)果如下。

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

MySQL、Microsoft SQL Server 以及 PostgreSQL 實(shí)現(xiàn)了該函數(shù)。

大小寫轉(zhuǎn)換

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

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

查詢返回的結(jié)果如下:

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

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

獲取子串

SUBSTRING(s, n, m) 函數(shù)返回字符串 s 中從位置 n 開(kāi)始的 m 個(gè)字符子串。例如:

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

查詢返回的結(jié)果如下:

SUBSTRING('數(shù)據(jù)庫(kù)', 1, 2)
-----------------------
數(shù)據(jù)

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

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

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

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

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

查詢返回的結(jié)果如下。

SUBSTR('數(shù)據(jù)庫(kù)', -2, 2)
---------------------
據(jù)庫(kù)

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

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

子串查找與替換

INSTR(s, s1) 函數(shù)查找并返回字符串 s 中子串 s1 第一次出現(xiàn)的位置。如果沒(méi)有找到子串,則會(huì)返回 0。例如:

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

查詢返回的結(jié)果如下:

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

“@”是字符串“l(fā)iubei@shuguo.com”中的第 7 個(gè)字符。

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

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

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

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

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

查詢返回的結(jié)果和上面的示例相同。

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

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

查詢返回的結(jié)果如下:

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

REPLACE 函數(shù)在 5 種主流數(shù)據(jù)庫(kù)中的實(shí)現(xiàn)一致。

截?cái)嘧址?/span>

TRIM(s1 FROM s) 函數(shù)刪除字符串 s 開(kāi)頭和結(jié)尾的子串 s1。例如:

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

第一個(gè)函數(shù)刪除了開(kāi)頭和結(jié)尾的“-”;第二個(gè)函數(shù)省略了 s1 子串,默認(rèn)表示刪除開(kāi)頭和
結(jié)尾的空格。查詢返回的結(jié)果如下:

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

Oracle 中的參數(shù) s1 只能是單個(gè)字符,其他數(shù)據(jù)庫(kù)中的參數(shù) s1 可以是多個(gè)字符。

SQLite 中的 TRIM(s, s1) 函數(shù)的調(diào)用格式與其他數(shù)據(jù)庫(kù)不同,例如:

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

查詢返回的結(jié)果和上面的示例相同。

提示:LTRIM(s)函數(shù)可以刪除字符串開(kāi)頭的空格,RTRIM(s)函數(shù)可以刪除字符串尾部的空格,這兩個(gè)函數(shù)是 TRIM 函數(shù)的簡(jiǎn)化版。


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