QSQLITE DB에서 regexp를 사용하려면,

커넥션 열 때 setConnectOptions("QSQLITE_ENABLE_REGEXP=1"); 을 설정해 주어야 한다.

bool DB::connectDatabase()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "connName");
    db.setConnectOptions("ISC_DPB_LC_CTYPE=UTF-8");
    db.setConnectOptions("QSQLITE_ENABLE_REGEXP=1");
    db.setDatabaseName(":memory:");
    if (!db.isValid())
    {
        qDebug() << "addDatabase failed.(db is not valid)";
        return false;
    }
    if (!db.isOpen())
    {
        if (!db.open())
        {
            qDebug() << QString("DB Open Failed - connName : %1, dbname : %2").arg("connName").arg(":memory:");
            QSqlDatabase::removeDatabase("connName");
            return false;
        }
    }
    return true;
}

 

데이터를 조회할 때는, 아래와 같이 사용한다.

한글로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[ㄱ-ㅎ가-힣]';

영어로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[a-zA-Z]';

숫자로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[0-9]';

일본어로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[ぁ-んァ-ヶー一-龠]' ;

중국어로 시작하는 데이터 조회

SELECT * FROM tablename WHERE `columnName` REGEXP '^[一-龥]';

샘플 코드

void DB::select() {
    QSqlDatabase DB = QSqlDatabase::database("connName");    

    QSqlQuery sql(DB);
    QString query = "SELECT * FROM tablename WHERE `subject` REGEXP '^[ㄱ-ㅎ가-힣]'";
    bool re = sql.exec(query);
    while (sql.next()) {
        qDebug() << sql.value(0).toString();
    }    
}

+ Recent posts