0

重複の可能性:
SQLを使用して文字列の末尾から数字を削除する方法

Songs次のようなsqliteテーブルがある場合:

id  SongName    
------------------
0   midnight   
1   Another song  
2   01 midnight01  
3   01 01 midnight
4   Another record
5   1 midnight

selectまたはupdateとREGEX式を使用すると、これは何を返しますか?:

id  SongName    
------------------
0   midnight   
1   Another song  
2   midnight01  
3   midnight
4   another record
5   midnight

私は使用しました

SongName REGEXP'\ b ^ [0-9]\b'の曲からSongNameを選択します

また

SongNameREGEXP'\d'の曲からSongNameを選択します

しかし、それでも私が望んでいた結果が得られませんでした。

4

2 に答える 2

1

申し訳ありませんが、私は C インターフェイスに慣れていません。しかし、適切な正規表現しか見つからない場合は、これでうまくいくかもしれません。

(\d+\s)+(.*)

ランダムな量の数字と空白の組み合わせに一致し、2 番目のキャプチャ グループを$2または\2で返すと、曲のタイトルになります。

注: これには、削除する番号と実際の曲のタイトルの間に空白が必要です。"01 01 some text" と "11 some text" にうまく一致します (2 番目のキャプチャ グループは "some text" を返します)。ただし、「01 01some text」と一致すると、「01some text」になります (空白の前の数字のみが削除されます)。

アップデート。これはうまくいくかもしれません。曲名のみを選択します。上記と同じ注意事項が適用されます。

[^\d+\s]+.*
于 2012-04-11T21:16:31.790 に答える
0

ドキュメントからの引用:

REGEXP演算子は、regexp()ユーザー関数の特別な構文です。デフォルトではregexp()ユーザー関数は定義されていないため、通常、REGEXP演算子を使用するとエラーメッセージが表示されます。「regexp」という名前のアプリケーション定義のSQL関数が実行時に追加されると、REGEXP演算子を実装するためにその関数が呼び出されます。

MATCH演算子は、match()アプリケーション定義関数の特別な構文です。デフォルトのmatch()関数の実装では例外が発生し、実際には何の役にも立ちません。ただし、拡張機能は、より便利なロジックでmatch()関数をオーバーライドできます。

つまり、これらの演算子の一方または両方をオーバーライドするには、Cインターフェイスを使用する必要があります。

正直なところ、これを実行する最善の方法は、データを再構築することです。曲名の数字の部分は役に立たない(この場合、そもそもそこにあるべきではない)か、そうでない(この場合、それらは独自の列にある必要があります)。

于 2012-04-11T18:51:40.610 に答える