3

$25.00 などの価格文字列を照合して、対応する通貨記号を見つけようとしています。たとえば、$25.00 は USD と一致する必要があります。これだけうまくいっています。ただし、25.00 (通貨記号なし) を渡すと、CUP で不要な一致が発生します。

SQL Server 2012 で次のテーブルをセットアップしました。

CurrencyId  varchar(3)
Symbol      nvarchar

データの一部を次に示します。

Currency Symbol
ANG      ƒ
CUP      ₱
EUR      €
USD      $

クエリは次のとおりです。

SELECT [t0].[CurrencyId], [t0].[Symbol]
FROM [dbo].[EWN_Currency] AS [t0]
WHERE '25.00' LIKE '%'+[t0].[Symbol]+'%'

テストのために文字列連結をスキップすると、少なくとも次のような悪い一致は返されません。

SELECT [t0].[CurrencyId], [t0].[Symbol]
FROM [dbo].[EWN_Currency] AS [t0]
WHERE '25.00' LIKE '%₱%'

LIKE '%'+[t0].[Symbol]+'%' では、文字列連結が正しく設定されていないようです。私はすべてを nvarchar に変換して遊んだことがありますが、運が悪いです。どうすればこれを機能させることができますか?ありがとう。

4

2 に答える 2

2

を使用してはLEFTどうですか?

SELECT *
FROM   TableName
WHERE  LEFT('$25.00',1) = Symbol
于 2013-04-02T14:55:36.773 に答える
0

試す:

with cte as
(select [Symbol], [CurrencyId] from [dbo].[EWN_Currency] where [Symbol] = '₱')
SELECT coalesce([t0].[CurrencyId], cte.[CurrencyId]) [CurrencyId],
       coalesce([t0].[Symbol], cte.[Symbol]) [Symbol]
FROM cte
LEFT JOIN [dbo].[EWN_Currency] AS [t0]
       ON '25.00' LIKE '%'+[t0].[Symbol]+'%'

注: 単一の文字列ではなく、通貨形式のデータのテーブルでこれを使用する場合は、cte からデータ テーブルにクロス結合し、データ テーブルから通貨テーブルに結合したままにすることをお勧めします。

(SQLFiddleはこちら)

于 2013-04-02T15:05:28.747 に答える