Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách sử dụng hàm SUBSTR() trong SQLite Android

Cú pháp SUBSTR()

SUBSTR(string, start, length) trích xuất chuỗi con từ start (bắt đầu từ 1) với độ dài length. Nếu bỏ length, lấy đến hết chuỗi.

Ví dụ: Lấy 2 ký tự đầu của tên

DatabaseHelper.java - Phần quan trọng

package com.example.substrdemo;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;

class DatabaseHelper extends SQLiteOpenHelper {
    static final String DB_NAME = "salaryDatabase";
    static final String TABLE = "SalaryDetails";

    DatabaseHelper(Context context) {
        super(context, DB_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE + 
            "(id INTEGER PRIMARY KEY, name TEXT, salary REAL, datetime DEFAULT CURRENT_TIMESTAMP)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int old, int n) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE);
        onCreate(db);
    }

    boolean insert(String name, String salary) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("name", name);
        cv.put("salary", salary);
        db.insert(TABLE, null, cv);
        return true;
    }

    // SUBSTR(name, 1, 2) lấy 2 ký tự đầu tiên
    ArrayList<String> getAllContacts() {
        ArrayList<String> list = new ArrayList<>();
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(
            "SELECT SUBSTR(name, 1, 2) AS fullname FROM " + TABLE, null);

        if (c.moveToFirst()) {
            do {
                list.add(c.getString(c.getColumnIndexOrThrow("fullname")));
            } while (c.moveToNext());
        }
        c.close();
        return list;
    }

    boolean update(String name, String salary) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("name", name);
        cv.put("salary", salary);
        db.update(TABLE, cv, "name=?", new String[]{name});
        return true;
    }

    boolean delete() {
        getWritableDatabase().delete(TABLE, null, null);
        return true;
    }
}

Kết quả

Nhập tên: "sairamkrishna" → ListView hiển thị: "sa" (2 ký tự đầu).

Ứng dụng thực tế

  • Tạo viết tắt: SUBSTR(name, 1, 1) || '. ' || SUBSTR(surname, 1, 1)
  • Lấy năm từ chuỗi ngày: SUBSTR(date_col, 1, 4)
  • Masking dữ liệu nhạy cảm: SUBSTR(card, -4) (4 số cuối)

Lưu ý

  • SQLite đánh chỉ số từ 1 (khác Java/Python từ 0).
  • start âm: tính từ cuối chuỗi (-1 là ký tự cuối).
  • Kết hợp với UPPER()/LOWER() để chuẩn hóa.