0

SQL コードを見つけようとしていますが、目的の出力が返されないようです。

これが私の作成/挿入ステートメントです

CREATE TABLE temp
    ([screenName] varchar(130), [realName] varchar(57))
;

INSERT INTO temp
    ([screenName], [realName])
VALUES
    ('WillyWonka', 'Will Stinson'),
    ('Barbara Smith', 'Barbara Smith'),
    ('JoanOfArc', 'JoanArcadia'),
    ('LisaD', 'Lisa Diddle')
;

私が探しているのは、realName 列にスペースが含まれている行です...最初の 2 行と 4 行目などです...そして、スペースの後の 2 番目の単語である realName は文字 'S' で始まり、その後に任意の文字が続き、その後に文字 i があり、その後に任意の一連の文字が続きます。これは私が立ち往生しているところです。

  SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where LEFT(realName,CHARINDEX(' ',realName)-1) like 'S%'

私がやっていることは間違っていると確信していますが、それを正しくする方法がわかりません。

変更をお詫びします -- 名前が変更され、複数のスペース ( Jimmy Dean Stinson) が含まれている可能性がある場合、コードを変更するにはどうすればよいですか? 右から見えるように変更したい場合は?

ありがとうございました。

4

3 に答える 3

0

欲しいですか

 SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where realName like '% S_i%'

ワイルドカード 1 文字

于 2015-03-10T19:38:45.920 に答える
0

で始まる名前の 2 番目の単語で、sその後に別の文字が続き、iその後に任意の数の文字が続きます。

 SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where LEFT(realName,CHARINDEX(' ',realName)-1) like 'S_i%'

アンダースコア文字_は、任意の 1 文字のワイルド カードです。

ここで使用できるその他のワイルドカード文字を見つけることができますLIKE

これを行うと、インデックス作成エラーを回避できます。これは、スペースがない値で発生しています。%名前の後にスペースがあり、その後に条件が続くことを保証するような文字列に追加しました。

 SELECT LEFT(realName,CHARINDEX(' ',realName)-1)
  FROM
  temp
  Where realName like '% S_i%'
于 2015-03-10T19:39:02.617 に答える
0

LIKE演算子を使用します。

SELECT *
FROM   temp
WHERE  realName LIKE '% S_i%' 
于 2015-03-10T19:36:30.657 に答える