Я пытаюсь удалить все значения в CallAmt ниже $51.
Я получаю сообщение об ошибке 8114 при выполнении следующего запроса.
Думаю, мне нужно как-то преобразовать CallAmt (varchar) в десятичный формат и удалить «$».
Любые идеи?
Select AccountName, AccountNumber, CallType, CallAmt, TradeDate, DueDate,
CASE
WHEN CallType = 'RM' THEN 'H'
WHEN CallType = 'CM' THEN 'H'
WHEN CallType = 'RT' THEN 'F'
END as CallType
from dbo.EXT250
Where CallType in ('RM', 'CM', 'MD', 'RT') and AccountNumber Not Like '[29]%' and CallAmt > 50.00
Понятно, однако я извлекаю данные из файла, который уже был сохранен таким образом.






Можешь попробовать:
Select AccountName, AccountNumber, CallType, CallAmt, TradeDate, DueDate,
(CASE WHEN CallType = 'RM' THEN 'H'
WHEN CallType = 'CM' THEN 'H'
WHEN CallType = 'RT' THEN 'F'
END) as CallType
from dbo.EXT250
Where CallType in ('RM', 'CM', 'MD', 'RT') and
AccountNumber Not Like '[29]%' and
cast(replace(CallAmt, '$', '') as decimal(10, 4)) > 50.00;
Если вам нужно использовать его как число, почему вы вообще сохраняете его как varchar? Вы не можете делать математику с помощью varchars, вы не можете правильно сравнивать их как числа (как вы можете видеть), и нет необходимости хранить '$'. Сделайте красивое форматирование в интерфейсе и используйте правильные типы для хранения, и у вас не будет этих проблем.