2012-03-12 2 views
1
SELECT iif(LIKE(sol,'EM06%'), "other",sol) as solGroup; 
    FROM dpgift GROUP BY solGroup 

上記は私に一意のsol値を含む列を与えるはずです。さらに、EM06で始まる任意のソル値を「その他」にグループ化する必要があります。それは動作しませんが、代わりに以下を返します。vfpのようなコマンドが動作しない

Solgroup 
DM081 
EM061 
EM081 
EM100 
EM101 
EM105 
EM111 
TM081 

私はここで間違っているのを誰も見ることができますか? 2行目と3行目を「その他」と呼びます。

私はこのようなコマンドを何度も使用しています。私は構文に何か間違って見ることができず、私は成功なしに他のバリエーションを試しました。私は特定のフィールドタイプがうまくいかない場合でもキャストしようとしましたが、結果は常に同じです。

編集: '*'を使用し、ワイルドカード文字列を最初のパラメータとして使用します。 likeはここに何もしない

iif((LIKE("4%",sol) OR sol = "4"),"8M","other"); 

が、ゾルは「4」で始まる場合は、「=」演算子がtrueを返したので、私は(気づいていなかった:私は実際には次のようにしばらくの間、この間違いを犯してきました誰かが私に '='行動への参照をリンクできますか?)。理由は私がsol = "4"を含む理由は、%が0以上ではなく1つ以上のcharを意味すると仮定したからです。 とにかく戻って、すべてのコードをiif(like("wtvr*",string),stringtrue,stringfalse)に変更しました。

文字列の比較に '='を使用すると、msdnライブラリには記載されていないように思われます。

+0

「EM」の前にcharがあってもあなたが 'iif(LIKE(sol、 '%EM06%')、" other "、sol)' – Lamak

+0

を実行した場合にも起こります。 – slicedtoad

答えて

3

別の代替は、 "$" を使用することであるAT()またはATC()

"$"、左側がANYWHERE右側に発見された場合を意味します...

EM06」(IIF "$ sol"、 "sol")

AT()は文字列が別の文字列で見つかったかどうかを比較するためのもので、文字列内の文字位置を返します(VFPは1から始まり、ゼロベース)

iif(at( "EM06"、sol)> 0、 "other"、sol)

または

ATC() - ATと同じですが、大文字と小文字は区別されません。

あなたは特に "EM06" は、文字列の先頭になりたい場合は、あなたもちょうど4)= "EM06"、ゾル(左LEFT()比較

IIF(「その他の操作を行うことができ」、ゾル)

あるいは

IIF(ATC( "EM06"、ゾル)= 1、 "その他"、ゾル)

およびSQL-セレクト内のはい、これらは全てある有効な..

+0

左とatcの両方が完璧に働いた、ありがとう。なぜ私のlike()がうまくいかなかったのか? – slicedtoad

+1

@slicedtoad、LIKE()は "%"ではなく "*"をワイルドカードの一致として使用します。 – DRapp

+0

私はすでにそれを試してみたと思った... – slicedtoad