SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

SQLite SUBSTRING () Giải thích

Trong SQLite, substring() là bí danh cho substr() .

Nó trả về một chuỗi con từ một chuỗi, dựa trên một vị trí bắt đầu nhất định trong chuỗi. Hai đối số là bắt buộc và đối số tùy chọn thứ ba được chấp nhận.

substring() đặt tên đã được giới thiệu trong SQLite 3.34.0, được phát hành vào ngày 1 tháng 12 năm 2020. Lý do là substring() cú pháp được giới thiệu là để tương thích với SQL Server.

Cú pháp

Vì vậy, bây giờ bạn có thể gọi hàm theo bất kỳ cách nào sau đây:

substr(X,Y,Z)
substr(X,Y)
substring(X,Y,Z)
substring(X,Y)
  • X là chuỗi đầy đủ chứa chuỗi con bạn muốn trả về.
  • Y là vị trí của ký tự đầu tiên của chuỗi con mà bạn muốn trả về từ chuỗi đó.
  • Z là số ký tự mà bạn muốn trả về. Nếu bỏ qua, tất cả các ký tự tiếp theo sẽ được trả về (bắt đầu từ Y ).

Nếu X là một chuỗi sau đó các chỉ số ký tự tham chiếu đến các ký tự UTF-8 thực tế. Nếu X là BLOB thì các chỉ số tham chiếu đến byte.

Như đã đề cập, substring() cú pháp chỉ có sẵn từ SQLite 3.34.0.

Ví dụ với 3 đối số

Dưới đây là một ví dụ cơ bản để minh họa cách sử dụng substring() với ba đối số.

SELECT substring('Dolemite', 3, 4);

Kết quả:

lemi

Ví dụ với 2 đối số

Nếu tôi bỏ qua đối số thứ ba từ ví dụ trước, tôi nhận được kết quả sau.

SELECT substring('Dolemite', 3);

Kết quả:

lemite

Điểm xuất phát phủ định

Bạn có thể cung cấp giá trị âm cho đối số thứ hai. Khi bạn làm điều này, ký tự đầu tiên của chuỗi con được tìm thấy bằng cách đếm từ bên phải thay vì bên trái.

SELECT substring('Dolemite', -3);

Kết quả:

ite

Đây là một ví dụ khác, lần này tôi chỉ định độ dài của chuỗi con.

SELECT substring('Dolemite', -7, 4);

Kết quả:

olem

Vì vậy, các giá trị âm có cùng tác động như khi sử dụng substring() trong MySQL. MySQL cũng có substr() hàm, là từ đồng nghĩa của substring() của nó hàm số.

Tuy nhiên, điều này khác với cách SQL Server xử lý các giá trị âm. Khi bạn chuyển một giá trị âm cho substring() trong SQL Server, nó sẽ chỉ bắt đầu đếm tại một điểm tưởng tượng trước khi chuỗi bắt đầu.

Độ dài chuỗi con phủ định

Ví dụ trước đã sử dụng một điểm bắt đầu phủ định. Trong ví dụ này, tôi sẽ sử dụng độ dài âm. Điều này có nghĩa là tôi sẽ cung cấp một giá trị âm cho đối số thứ ba.

SELECT substring('Dolemite', -1, -4);

Kết quả:

emit

Vì vậy, việc cung cấp giá trị âm cho đối số thứ ba dẫn đến các ký tự đứng trước điểm bắt đầu được trả về.

Điều này cũng áp dụng khi đối số thứ hai là một giá trị dương.

SELECT substring('Dolemite', 6, -4);

Kết quả:

olem

Ví dụ về cơ sở dữ liệu

Dưới đây là một ví dụ sử dụng substring() trong một truy vấn cơ sở dữ liệu đối với cơ sở dữ liệu mẫu Chinook.

SELECT 
    substring(Name, 1, 10),
    Name
FROM Artist
ORDER BY Name DESC
LIMIT 10;

Kết quả:

Chuỗi con
substring(Name, 1, 10)  Name                             
----------------------  ---------------------------------
Zeca Pagod              Zeca Pagodinho                   
Youssou N'              Youssou N'Dour                   
Yo-Yo Ma                Yo-Yo Ma                         
Yehudi Men              Yehudi Menuhin                   
Xis                     Xis                              
Wilhelm Ke              Wilhelm Kempff                   
Whitesnake              Whitesnake                       
Vinícius E              Vinícius E Qurteto Em Cy         
Vinícius E              Vinícius E Odette Lara           
Vinícius D              Vinícius De Moraes & Baden Powell

Trong trường hợp này, tôi đã trả lại mười ký tự đầu tiên từ Name cột. Tôi cũng đã trả lại toàn bộ nội dung của Name để so sánh kết quả.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gây ra bởi:android.database.sqlite.SQLiteException:không có bảng như vậy:(mã 1) Android

  2. Tôi có nên tạo một lớp kế thừa SQLiteOpenHelper cho mỗi bảng trong cơ sở dữ liệu của mình không?

  3. (Android) Tìm đường dẫn / Android trong bộ nhớ trong

  4. Làm thế nào để cung cấp cho vị trí 0 của spinner một giá trị nhắc nhở?

  5. Android:SQLite tiết kiệm mảng chuỗi?