0

スペースを文字列から OR ステートメントに変換しようとしています。

Declare @postcodes varchar(128)
SET @postcodes = '2130 2602' --this input will be postcodes separated by a space (I'm in Australia so the postcodes are only 4 numbers long)
SET @postcodes = REPLACE(@postcodes, ' ', ' OR postcode = ') --I know this isn't right but it shows what I am trying to achieve
SELECT *
FROM users
WHERE postcode = @postcodes

上記のクエリが実際にユーザーを探していることはわかっています。

postcode = '2130 OR postcode = 2602'

私は本当にユーザーを見つけたいです

postcode = '2130' OR postcode = '2602'

私がグーグルで何をすべきかについてのアイデアや方向性はありますか?

アップデート

Albin SunnanboFalconによって提案された方法を組み合わせることになりました。Will Hughesによって提案された関数メソッドは、はるかに洗練されていましたが、この特定のインストールでは関数を使用したくないと思います。

これが、いくつかのクリーニング機能を追加した最後のクエリです。

Declare @postcodes varchar(128)
SET @postcodes = '2130 2602 2000'

--Postcode cleaning
SET @postcodes = REPLACE(@postcodes,';',' ') --removes ";"
SET @postcodes = REPLACE(@postcodes,',',' ') --removes ","
SET @postcodes = (LTRIM(RTRIM(@postcodes))) --trim white space
SET @postcodes = REPLACE(@postcodes,'  ',' ') --removes double spaces
SET @postcodes = REPLACE(@postcodes,'  ',' ') --removes double spaces again
SET @postcodes = '''' + REPLACE(@postcodes,' ',''',''') + '''' --adds ' to @postcodes

DECLARE @SQLString nvarchar(MAX);
SET @SQLString = N'
SELECT * 
FROM users
WHERE postcode IN(' + @postcodes + ')';

EXECUTE sp_executesql @SQLString;

SELECT @SQLString AS SQLString --This part serves no purpose, it just shows you what the query looks like
4

3 に答える 3

3

このStack Overflow Questionへの回答を使用して、文字列を分割できます。

この関数を作成したら、次のように使用できます。

Declare @postcodes varchar(128)
SET @postcodes = '2130 2602'

SELECT *
FROM users
   JOIN dbo.Split(' ',@postcodes) postcodes 
   ON users.postcode = postcodes.s
于 2012-05-08T04:28:56.383 に答える
2
Declare @postcodes varchar(128)
SET @postcodes = '2130 2602'  
SET @postcodes = CONCAT('"',REPLACE(@postcodes, ' ', '" OR postcode = "'),'"') -- Now it will make it "2130" OR postcode = "2602"-------- 

SELECT *
FROM users
WHERE postcode = @postcodes

お役に立てれば

于 2012-05-08T05:35:41.593 に答える
2

文字列を作成し、sp_executesql で実行します

Declare @postcodes varchar(128)
SET @postcodes = '2130 2602'
SET @postcodes = REPLACE(@postcodes, ' ', ',')

DECLARE @SQLString nvarchar(MAX);
SET @SQLString = N'SELECT *
FROM users
WHERE postcode IN (' + @postcodes ')';

EXECUTE sp_executesql @SQLString;

ただし、SQL インジェクションには注意してください。

于 2012-05-08T04:30:29.053 に答える