SQLite Các hàm chuỗi: REPLACE, SUBSTR, TRIM, ROUND

SQLite theo mặc định được trang bị một danh sách các chức năng tích hợp trong SQLite thư viện. Bạn cũng có thể thêm một số hàm tùy chỉnh khác bằng ngôn ngữ C để mở rộng các hàm cốt lõi.

Lưu ý rằng, đối với tất cả các ví dụ sau, bạn phải chạy sqlite3.exe và mở kết nối đến cơ sở dữ liệu mẫu dưới dạng flow:

Bước 1) Trong bước này,

  1. Mở My Computer và điều hướng đến thư mục sau “C:\sqlite" và sau đó
  2. mở "sqlite3.exe":

SQLite Hàm chuỗi

Bước 2) Mở cơ sở dữ liệu “Hướng dẫnSampleDB.db” bằng lệnh sau:

SQLite Hàm chuỗi

Bây giờ bạn đã sẵn sàng để chạy bất kỳ truy vấn và thử bất kỳ truy vấn nào được sử dụng trong các phần sau.

Tìm LENGTH của một chuỗi trong SQLite

Để tìm độ dài của chuỗi, hãy sử dụng LENGTH(X) trong đó X là giá trị chuỗi. Nếu X là giá trị null thì hàm độ dài sẽ trả về giá trị null.

Bạn cũng có thể sử dụng hàm độ dài với các giá trị số để lấy độ dài của giá trị số.

Ví dụ:

Trong ví dụ sau, chúng ta sẽ thử cú pháp hàm LENGTH với các giá trị như sau:

SELECT LENGTH('A string'), LENGTH(NULL), LENGTH(20), LENGTH(20.5);

Điều này sẽ cung cấp cho bạn:

Tìm LENGTH của một chuỗi trong SQLite

Kết quả như sau:

  • LENGTH('A string') trả về 8 là độ dài của chuỗi “Chuỗi A”.
  • LENGTH(NULL) trả về giá trị rỗng.
  • LENGTH(20) trả về 2, vì 20 dài 2 độ dài.
  • LENGTH(20.5) trả về 4; Dấu phẩy động “.” được tính là một ký tự, vì vậy bạn sẽ có bốn ký tự – 3 ký tự là độ dài của các số. Thêm một ký tự nữa cho dấu phẩy động “.”.

Đổi chữ hoa chữ thường với hàm UPPER và hàm LOWER

UPPER(X) sẽ trả về cùng một chuỗi x, nhưng nó sẽ biểu thị tất cả các ký tự chuỗi bằng ký tự in hoa.

LOWER(X) sẽ trả về cùng một chuỗi x, nhưng nó sẽ biểu thị tất cả các ký tự chuỗi bằng các ký tự nhỏ.

UPPER và LOWER trả về giá trị null nếu bạn chuyển giá trị null cho chúng.

Nếu bạn chuyển các giá trị số cho UPPER hoặc LOWER, cả hai giá trị này sẽ trả về giá trị số chính xác.

Ví dụ:

SELECT UPPER('a string'), LOWER('A STRING'), UPPER(20), LOWER(20), UPPER(NULL), LOWER(NULL);

Điều này sẽ cung cấp cho bạn:

Ví dụ về hàm UPPER và LOWER trong SQLite

Kết quả như sau:

  • UPPER('a string') trả về chuỗi “một chuỗi” được thể hiện bằng chữ in hoa “MỘT CHUỖI".
  • LOWER('A STRING') trả về chuỗi “MỘT CHUỖI” được thể hiện bằng chữ cái nhỏ “một chuỗi".
  • UPPER(20), LOWER(20) trả về cùng một số vì chúng không có bất kỳ ảnh hưởng nào đến các số.
  • UPPER(NULL), LOWER(NULL) trả về null vì chúng ta đã chuyển giá trị null cho chúng.

SQLite Hàm SUBSTR

Hàm SUBSTR trả về một số chuỗi cụ thể, bắt đầu từ một vị trí cụ thể. Bạn có thể truyền ba toán hạng cho hàm, như thế này “SUBSTR(X,Y,Z)” như sau:

  • X là chuỗi ký tự hoặc cột chuỗi để phân tích cú pháp. Bạn có thể chuyển một giá trị bằng chữ (giá trị tĩnh) hoặc tên cột và trong trường hợp này, giá trị sẽ được đọc từ các giá trị của cột.
  • Y là vị trí bắt đầu để trừ chuỗi bắt đầu từ nó.
  • Z là số ký tự cần phân tích bắt đầu từ vị trí cụ thể Y. Số này là tùy chọn, bạn có thể bỏ qua nó và trong trường hợp này, SQLite sẽ trừ chuỗi bắt đầu từ vị trí Y cho biết phần cuối của chuỗi.

Ví dụ:

Trong truy vấn sau, chúng ta sẽ sử dụng hàm SUBSTR để lấy 4 ký tự bắt đầu từ ký tự thứ hai trong tên của học sinh:

SELECT StudentName, SUBSTR(StudentName, 2, 4), SUBSTR(StudentName, 2)
FROM Students;

Điều này sẽ cung cấp cho bạn:

Ví dụ về hàm SUBSTR trong SQLite

  • SUBSTR(Tên sinh viên, 2, 4) xâu chuỗi con chuỗi “Tên học sinh” bắt đầu từ ký tự thứ hai và trả về 4 ký tự tiếp theo.
  • Tuy nhiên, trong hàm SUBSTR(Tên sinh viên, 2) chúng tôi không chỉ định số cho các ký tự được trả về, đó là lý do SQLite trả về tất cả các ký tự còn lại trong “Tên học sinh” bắt đầu từ vị trí thứ hai.

Thay đổi các phần của Chuỗi bằng SQLite Chức năng THAY THẾ

REPLACE được sử dụng để thay thế từng chuỗi xảy ra trên một chuỗi khác bằng một chuỗi.

REPLACE(X, Y, Z) – X là chuỗi ký tự hoặc cột đầu vào. Y là chuỗi cần thay thế bằng chuỗi Z. Lưu ý rằng nó sẽ thay thế bất kỳ sự xuất hiện nào của chuỗi Y bằng Z chứ không chỉ một.

Ví dụ:

Trong truy vấn sau, chúng ta sẽ thay thế tất cả các lần xuất hiện của chuỗi “xx” với chuỗi “SQLite":

SELECT REPLACE('xx is very lightweight, xx is easy to learn', 'xx', 'SQLite');

Điều này sẽ cung cấp cho bạn

Ví dụ về hàm REPLACE trong SQLite

  • Hàm thay thế đã thay thế tất cả các chuỗi “xx” với chuỗi “SQLite".
  • Vì vậy, đầu ra sẽ là "SQLite rất nhẹ, SQLite rất dễ học”.

Cắt bớt khoảng trống bằng SQLite Hàm TRIM

TRIM loại bỏ các khoảng trống ở đầu hoặc cuối chuỗi. Nó sẽ không xóa bất kỳ khoảng trắng nào ở giữa chuỗi, chỉ ở đầu hoặc cuối chuỗi.

Ví dụ:

Trong truy vấn sau, chúng ta sẽ sử dụng hàm TRIM để xóa các khoảng trắng ở đầu và cuối chuỗi.

Lưu ý rằng, toán tử ghép “||” được dùng để thêm dấu “;” đến cuối chuỗi. Để cho bạn thấy rằng những khoảng trống đã bị xóa trong cửa sổ màu đen.

SELECT TRIM('      SQLite is easy to learn        ') || ';';

Điều này sẽ cung cấp cho bạn:

Ví dụ về hàm TRIM trong SQLite

  • Lưu ý cách các khoảng trống được xóa khỏi đầu và cuối chuỗi, thay thế bằng ' ; ' cuối cùng.

Đọc giá trị tuyệt đối với SQLite Chức năng ABS

Hàm ABS trả về giá trị tuyệt đối của một giá trị số. Giá trị tuyệt đối là giá trị số không có dấu dương hoặc dấu âm. ABS(X) trả về một giá trị tùy thuộc vào giá trị của X như sau:

  • Giá trị tuyệt đối của X nếu X là giá trị số.
  • Giá trị NULL nếu X là giá trị null.
  • Giá trị “0.0” nếu X là một chuỗi.

Ví dụ:

Trong truy vấn sau, chúng ta sẽ thử lấy giá trị tuyệt đối của một chuỗi, một số và một giá trị null bằng cách sử dụng hàm ABS:

SELECT ABS(-2), ABS(+2), ABS('a string'), ABS(null);

Điều này sẽ cung cấp cho bạn:

Ví dụ về chức năng ABS trong SQLite

Kết quả như sau:

  • ABS(-2), ABS(+2) trả về 2, vì 2 là giá trị tuyệt đối cho cả “-2” và “+2”.
  • ABS('a string') trả về “0.0” vì bạn đã chuyển giá trị chuỗi chứ không phải giá trị số.
  • ABS(null) trả về null vì bạn đã chuyển giá trị null cho nó.

Làm tròn giá trị bằng Hàm ROUND trong SQLite

Số thập phân là số có dấu phẩy động “.” trên đó, ví dụ: “20.5”, “8.65”. Phần bên trái dấu phẩy động gọi là phần nguyên, phần bên phải dấu phẩy động gọi là phần thập phân.

Số nguyên là những số không có dấu phẩy động trên đó. Ví dụ: “20”, “8”.

ROUND(X) chuyển đổi các giá trị thập phân hoặc cột X thành số nguyên. Phần nguyên là phần bên trái dấu thập phân sẽ được trả về và tất cả các chữ số bên phải dấu thập phân sẽ bị xóa.

Ví dụ:

Trong truy vấn sau, chúng ta sẽ thử hàm ROUND với các tùy chọn khác nhau:

SELECT ROUND(12.4354354), ROUND(12.4354354, 2), ROUND(NULL), ROUND('a string');

Điều này sẽ cung cấp cho bạn:

Ví dụ về hàm ROUND trong SQLite

Kết quả như sau:

  • ROUND(12.4354354) – trả về giá trị “12”, vì bạn không chỉ định số chữ số. Vì thế, SQLite đã loại bỏ toàn bộ phần thập phân.
  • ROUND(12.4354354, 2) – trả về giá trị “12.44”, vì bạn chỉ chỉ định 2 chữ số để làm tròn, là hai chữ số tính từ bên phải dấu thập phân.
  • ROUND(NULL) – trả về null vì bạn đã chuyển giá trị null cho nó.
  • ROUND('a string') – trả về giá trị “0.0” vì bạn đã chuyển một giá trị chuỗi cho nó.

Tìm kiểu dữ liệu của biểu thức bằng Hàm TYPEOF

Nếu bạn muốn tìm hiểu loại cột hoặc giá trị bằng chữ, bạn có thể sử dụng hàm TYPEOF để làm điều đó.

Hàm TYPEOF(X), từ tên của nó, trả về kiểu dữ liệu của biểu thức X. Nó trả về một giá trị chuỗi cho biết kiểu dữ liệu của X. Nó trả về giá trị dựa trên các kiểu dữ liệu, cho dù đó là giá trị “NULL”, thực, văn bản, số nguyên, …, v.v.

Ví dụ:

Trong truy vấn sau, chúng ta sẽ thử hàm TYPEOF với các kiểu giá trị theo nghĩa đen khác nhau:

SELECT TYPEOF(null), TYPEOF(12), TYPEOF(12.5), TYPEOF('a string');

Điều này sẽ cung cấp cho bạn:

Ví dụ về hàm TYPEOF trong SQLite

Kết quả trả về như sau:

  • TYPEOF(null) – trả về null vì bạn đã chuyển giá trị null cho nó.
  • TYPEOF(12) – trả về một số nguyên vì 12 là số nguyên.
  • TYPEOF(12.5) – trả về REAL vì 12.5 là số thực.
  • TYPEOF('a string') – trả về văn bản vì “một chuỗi” là một văn bản.

Tìm bản ghi được chèn cuối cùng với SQLite LAST_INSERT_ROWID

SQLite gán một khóa số nguyên (Id) cho tất cả các hàng trong tất cả các bảng. Số này được sử dụng để xác định duy nhất các hàng này.

Khi bạn CHÈN một hàng mới trên một bảng, SQLite sẽ gán cho rowid một giá trị duy nhất.

Nếu bảng có khóa chính chỉ được khai báo trên một cột và cột đó có kiểu dữ liệu INTEGER thì giá trị cột này sẽ được sử dụng làm rowid.

Hàm LAST_INSERT_ROWID() trả về ROW_ID của hàng được chèn cuối cùng trong bất kỳ bảng nào trong cơ sở dữ liệu. Lưu ý rằng nó không có bất kỳ toán hạng nào.

Ví dụ:

Trong ví dụ sau, chúng ta sẽ chạy hàm LAST_INSERT_ROWID() như sau:

SELECT LAST_INSERT_ROWID();

Điều này sẽ cung cấp cho bạn:

Ví dụ về hàm LAST_INSERT_ROWID trong SQLite

  • LAST_INSERT_ROWID() trả về 0 vì không có hàng nào được chèn vào bất kỳ bảng nào trong kết nối cơ sở dữ liệu hiện tại.

Bây giờ, hãy chèn một học sinh mới và chạy lại hàm LAST_INSERT_ROWID() sau câu lệnh chèn, như sau:

INSERT INTO Students VALUES(11, 'guru', 1, '1998-10-12');
SELECT LAST_INSERT_ROWID();

Điều này sẽ cung cấp cho bạn:

Ví dụ về hàm LAST_INSERT_ROWID trong SQLite

  • Sau khi chúng tôi chèn một sinh viên mới có id 11, LAST_INSERT_ROWID() sẽ trả về id hàng được chèn cuối cùng là 11.

Lấy phiên bản của bạn SQLite thư viện

Để có được phiên bản của bạn SQLite thư viện, bạn phải gọi hàm SQLITE_VERSION().

Ví dụ:

Hãy cùng tìm hiểu xem phiên bản của nó là gì SQLite chúng tôi đang sử dụng bằng cách chạy lệnh sau:

SELECT SQLITE_VERSION();

Điều này sẽ cung cấp cho bạn:

Ví dụ để lấy phiên bản của bạn SQLite thư viện

SQLITE_VERSION() trả về 3.9.2 là phiên bản của SQLite chúng tôi đang sử dụng.

Tạo các hàm do người dùng xác định và tổng hợp các hàm do người dùng xác định

Đối với một số người dùng, SQLite chức năng cốt lõi bị hạn chế. Họ có thể cần thêm các chức năng tùy chỉnh cho nhu cầu tùy chỉnh của mình.

SQLite không hỗ trợ tạo các hàm do người dùng xác định. Không giống như các hệ thống quản lý cơ sở dữ liệu khác, bạn không thể tạo các hàm do người dùng xác định trong SQLite trực tiếp.

Tuy nhiên, bạn có thể tạo một hàm bằng các ngôn ngữ lập trình như C#, C, PHP hoặc C++ và gắn chức năng đó với lõi SQLite các chức năng trong SQLite chính thư viện, sử dụng “sqlite3_create_function" chức năng. Sau đó, bạn có thể sử dụng lại chúng trong cơ sở dữ liệu của mình.

Ví dụ:

Trong ví dụ sau, chúng ta sẽ tạo một hàm do người dùng định nghĩa bằng cách sử dụng C# ngôn ngữ lập trình và thêm nó vào SQLite chức năng:

[SQLiteFunction(Name = "DoubleValue", Arguments = 1, FuncType = FunctionType.Scalar)]
public class DoubleValue: SQLiteFunction
{
    public override object Invoke(object[] args)
    {
        return args[0] * 2;
    }
}

Đoạn mã này được viết trong Ngôn ngữ lập trình C#; nó tạo ra hàm C# bằng mã C#.

Tên hàm sẽ là “DoubleGiá trị” nó nhận vào một tham số và trả về giá trị của nó nhân với 2.

Lưu ý rằng C# tự động thêm chức năng này vào SQLite. Tất cả những gì bạn cần là biên dịch và chạy mã này. Sau đó C# sẽ thêm hàm có cùng tên đó vào danh sách SQLite chức năng. Sau đó, bạn có thể sử dụng chức năng này trong SQLite.

Tương tự như vậy khi sử dụng các ngôn ngữ lập trình như C#, C, PHP hoặc C++, bạn cũng có thể tạo các hàm tổng hợp do người dùng xác định. Được sử dụng để mở rộng các hàm tổng hợp trong SQLite và sử dụng chúng để tạo các hàm tổng hợp tùy chỉnh.

Tổng kết

  • SQLite cung cấp một tập hợp đầy đủ các hàm dựng sẵn giúp làm việc với các bảng và cột của cơ sở dữ liệu dễ dàng như chúng ta đã thấy. Bạn có thể sử dụng các hàm này với các cột cũng như các giá trị bằng chữ trong bất kỳ biểu thức nào trong truy vấn SQL của mình.
  • Bạn cũng có thể sử dụng hàm độ dài với các giá trị số để lấy độ dài của giá trị số.
  • UPPER và LOWER trả về giá trị null nếu bạn chuyển giá trị null cho chúng.
  • Hàm SUBSTR trả về một số chuỗi cụ thể, bắt đầu từ một vị trí cụ thể.
  • REPLACE được sử dụng để thay thế từng chuỗi xảy ra trên một chuỗi khác bằng một chuỗi.
  • TRIM loại bỏ các khoảng trống ở đầu hoặc cuối chuỗi.
  • Hàm ABS trả về giá trị tuyệt đối của một giá trị số.
  • ROUND(X) chuyển đổi các giá trị thập phân hoặc cột X thành số nguyên.
  • Hàm TYPEOF(X), từ tên của nó, trả về kiểu dữ liệu của biểu thức X.
  • Hàm LAST_INSERT_ROWID() trả về ROW_ID của hàng được chèn cuối cùng trong bất kỳ bảng nào trong cơ sở dữ liệu.