3

我正在尝试匹配一个价格字符串,例如 $25.00,以找到相应的货币符号。例如,25.00 美元应与美元匹配。这很有效;但是,当我输入 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 回答