0

ここで簡単なものが欠けているような気がしますが...

mySQLテーブル(users.fName)に次のデータがある場合:

--------------    
| Jason M.   |
--------------
| Eric       |
--------------
| Tim S      |
--------------
| Peggy Sue  |
--------------

そして、私は最終的に:

--------------    
| Jason      |
--------------
| Eric       |
--------------
| Tim        |
--------------
| Peggy Sue  |
--------------

私は私が排除しなければならないと思います。Jason M.(これで十分簡単に​​できますUPDATE users SET fName = REPLACE(fName, ".", "");)の後ですが、どうすればMとSを削除して、Sueを残すことができますか?

SUBSTRING_INDEXフィールドの一部を取得できることはわかってSELECT SUBSTRING_INDEX(fName, ' ', -1), LENGTH(SUBSTRING_INDEX(fName, ' ', -1)) FROM usersいます。文字列の2番目の部分の長さを取得するようなものを使用できますが、フィールドを文字列の最初の部分に更新する方法がわかりません。2番目の部分のみです。 1文字の長さ。

アップデート

回答フォーム@Danは、彼のクエリに1つの変更を加えると、必要なものを取得しました。更新されたクエリは次のとおりです。

SELECT `fName`, SUBSTRING_INDEX(`fName`, ' ', -1) AS MiddleInitial
    FROM `users`
    WHERE TRIM(`fName`) LIKE '%.' 
        AND length(`fName`)> 4 
        OR length(SUBSTRING_INDEX(`fName`, ' ', -1)) = 1;

最後ANDは、ORすべてが機能するようになります。

4

2 に答える 2

3

私も同様の状況で、where句を使用して、フィールドのどこかにスペースがある名前のみを選択しました。さらに、ミドルネームのイニシャルであると期待していたのは、実際には1文字の長さであるかどうかを確認しましたlength(SUBSTRING_INDEX(First, ' ', -1)) = 1

SELECT `First`, SUBSTRING_INDEX(`First`, ' ', -1) AS MiddleInitial
FROM YourTable
WHERE trim(`First`) LIKE '%.' AND length(`First`)> 4 AND 
length(SUBSTRING_INDEX(`First`, ' ', -1)) = 1;

更新を実行する前に選択の結果を確認しますが、これによりクエリがイニシャルのみに制限され、BillyBobのような名前はそのままになります。

于 2013-09-05T21:27:49.043 に答える
0

UDFのようなユーザー定義関数を使用し、それを行うために正規表現を使用できます。

于 2013-02-12T17:01:59.153 に答える