人生のプチ美学を教えてください!!

検索したいデータに空白がある時空白のない検索文字列でlike検索して
データがヒットするようにしたいです

col1

NTTデ ー タ
NTTデ - タ シ ス テ ム ズ
NTTデ ー タ ク オ リ テ ィ
日立製作所
IBM

このようなカラムのデータが入っているとします
※空白を含むデータや空白を含まないデータがあるとします

これを select * from table1 where col1 like '%NTTデータシス%'
とするとNTTデ ー タ シ ス テ ム ズが検索されるようにしたいと思っています。

replace関数を使って実現しようと思ったのですが
SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%'
これだとデータがヒットせず単純に表示するときに空白が削除されるだけです
どうすれば空白を含むデータを検索することができるでしょうか


できれば全角・半角両方を含む文字のデータでも検索できるようにしたいです
SQLServer 2005を利用しています。

A 回答 (2件)

>SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%'



SELECT句とWHERE句は別物です。以下のようにWHERE句でREPLACEを指定してください。
※SQLの解釈上、WHERE句が先に解釈されて対象データを特定しSELECT句の指示に従いデータを抽出します。

SELECT REPLACE(col1,' ','') as col1 From table1 where REPLACE(col1,' ','') like '%システムズ%'


create table table1
(
col1 varchar(100)
);

insert into table1 values('NTTデ ー タ');
insert into table1 values('NTTデ - タ シ ス テ ム ズ');
insert into table1 values('NTTデ ー タ ク オ リ テ ィ');
insert into table1 values('日立製作所');
insert into table1 values('IBM');


SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%';

col1
------------------
(0 行処理されました)

SELECT REPLACE(col1,' ','') as col1 From table1 where REPLACE(col1,' ','') like '%システムズ%';

col1
------------------
NTTデ-タシステムズ

(1 行処理されました)


>できれば全角・半角両方を含む文字のデータでも検索できるようにしたいです
SQL Serverの設定は「全角半角を区別する」になってますか?
区別しない設定なら、そのままでOKです。
区別する設定になっているならREPLACEを二度がけすればよいと思います。
where REPLACE(REPLACE(col1,' ',''),' ','') like '%システムズ%'
    • good
    • 1

これでいかがでしょうか。


select * from table1 where replace(replace(col1,' ',''),' ','') like '%NTTデータシス%'
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報