Как я могу использовать оператор LIKE для выполнения этого соответствия в SQL Server?
Я пытаюсь сопоставить строку цены, например, $ 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]. [Символ] + '%'. Я играл с преобразованием всего в nvarchar без везения. Как я могу сделать эту работу? Благодарю.
Как насчет использования LEFT
?
SELECT * FROM TableName WHERE LEFT('$25.00',1) = Symbol
- Демоверсия SQLFIddle
Пытаться:
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)