2011-12-21 20 views
3

テーブル内の末尾のスペースをどのように識別できるかを知りたい。私は、SQL Server 2008およびテストとして、次の表を作成するテーブル内に末尾の空白がないか調べる

CREATE TABLE first_test_name 
    ( 
    firstName varchar(255) 
    ) 

を使用して、このようなレコードを挿入している:私は、スペースを挿入してからのように新しいレコードを追加しようとした

insert into first_test_name (firstName) 
values('Bob') 

をこの:

insert into first_test_name (firstName) 
values('Bob ') -- just 1 space 

と3時間のために、

insert into first_test_name (firstName) 
values('Bob ') -- two spaces used this time. 
私は「ボブ」(スペースなし)のためのクエリを実行場合

は今、私はまだ3 マイクエリのカウントを取得しました:

select count(*) from first_test_name WHERE firstName = 'Bob' 

は答えは1になっているべきではないでしょうか。

また、このテーブルではsp_helpを使用していますが、「トリムブランクのトリム」の値はnoに設定されています。

なぜ3カウントになるのですか?私は私が見つから二列の右の答えを得る

​​

をこのクエリを使用して検索する場合、私は、関連のノートでちょうど1

を期待していました。

これを繰り返すと、質問は「Bob」を検索するときに3とカウントされる理由です。 また、この場合、「トリムブランクをトリムする」とはどういう意味ですか?

+0

は、このリンクhttpを見てみましょうUSERS FROM:// decipherinfosys .wordpress.com/2007/02/15/ansi_padding-and-trailing-spaces-in-sql-server/SQL Serverが文字列をスペースと比較する方法を理解するために – Lamak

答えて

6

なぜ「Bob」を検索すると3カウントになるのですか?

SQL Server ignores trailing spaces in most string comparisons.

また、 "トリム末尾の空白は、" このような場合には何を意味するのでしょうか?

これは、テーブルの作成時にANSI_PADDINGオプションセットを示します。

1つまたは2つの末尾のスペースを持つ2つを識別するにはどうすればよいですか?

ここには1つの方法があります。

SELECT * 
FROM first_test_name 
WHERE firstName LIKE 'Bob ' 

そして、SQL Serverは、比較の際に空白を含む文字列を拡大していきます

SELECT * 
FROM first_test_name 
WHERE firstName LIKE 'Bob' AND firstName NOT LIKE 'Bob ' 
+0

回答とリンク(実際はかなり役に立ちました)のおかげです。 – Ray

+0

'Bob%[^]%' – Ray

+1

@Ray - 最初のビットと一致するva 'Bob {space} 'を始点とし、インデックスを使用して一致するレコードを見つけることができます。 2番目のビットは 'Bob {space} 'で始まるが、' Bob Hope'のような空白以外の文字の後に続くものはすべて削除します。反射については、それのどれもが必要でした。 'LIKE 'Bob'はうまく動作します。 –

3

なし、末尾のスペースを持つものを見つけます。

これは私がどうなるのかです:

SELECT COUNT(*) 
FROM first_test_name 
WHERE REPLACE(firstName, ' ', '_') = 'Bob' 
+0

私はこの回答が気に入っています。私にとっては、where句で同様のことをしました。replace(relationship、 'S'、 'S_')= 'S_'です。 selectステートメントは、select:selectリレーションシップで同じことをしたときに末尾の空白を見つけようとしたところでした.X – natur3

1

もう一つの方法は、文字列の上に何かを追加するかもしれません。

declare @test table(
id varchar(4) not null, 
firstname varchar(255) not null) 

insert into @test values('1', 'Bob') 
insert into @test values('2', 'Bob ') 
insert into @test values('3', 'Bob ') 
insert into @test values('4', ' Bob') 

select count((firstname + 'end')) from @test 
where (firstname + 'end') not like '% %' 

クエリがこれを行うには良いクリーンな方法は、彼らは例えば一致しない場所自体のRtrim文字版と照らし合わせて、元の文字列を比較することであろう。1.

1

の数を返します。

SELECT * 
FROM First_Test_Name 
WHERE Firstname <> RTrim(Firstname) 

これはファーストネームは、私が最近見ていたし、これに対する答えを見つけることができませんでした(と思う...)

+1

からreplace(relationship、 'S'、 'S_')を置き換えます。 '=' OR '<>'文字列の比較で使用します。 –

+0

!=オプションはSQL Serverで使用できますか、それともOracleだけですか? –

+0

それは利用可能ですが、それは異なって動作しません。ここに記載されている比較述語のルールに従います。http://support.microsoft.com/kb/316626 –

0

を末尾のスペースをしているすべてのレコードを返す必要があります。私は1つに渡って以来、私は共有したいと思った。

https://stackoverflow.com/a/14188944/1953837

LENはデフォルトで末尾の空白をトリム。以下を使用して前面に移動し、フィールド長をカウントします。

これは今後検索するユーザーに役立ちます。

(LEN(REVERSE(フィールド名))

2

SELECT * DATALENGTH(ユーザー名)<> DATALENGTH(RTRIM(ユーザー名))

関連する問題