SQL Проблема с преобразованием: сравнение выбранной части VarChar и денег - PullRequest
0 голосов
/ 10 июля 2020

У меня есть таблица, которую я не могу изменить, и мне нужно провести сравнение двух столбцов.

  • Первый столбец TtlPrice имеет money тип данных
  • Второй AuthComments имеет varchar(max) тип данных

Мы вводим комментарий в столбец AuthComments и в конце добавляем «1,00 долл. США» (или другую цену, которую мы разрешаем). Я хочу убедиться, что TtlPrice не выше, чем цена в поле AuthComment.

Вот образец данных:

OrderNo | TtlPrice | AuthComment
--------+----------+----------------------
12345   | 51.74    | Auth by Sue- $62.84

Вот мой текущий запрос:

SELECT
    OrderNo, 
    TtlPrice, 
    AuthComment 
FROM     
    tableA
WHERE
    (CAST(TtlPrice AS VarChar) > CAST(SUBSTRING(AuthComments,
                                                CHARINDEX('$', AuthComments) + 1,
                                                LEN(AuthComments) - CHARINDEX('$', AuthComments)) AS varchar))

Вышеупомянутое, основанное на данных, должно дать 0 результатов, потому что TtlPrice меньше, чем AuthComment цена. Но это не так, это дает результат в одну строку. Я думаю, что это не сравнение varchar должным образом, но попытка преобразовать в какие-либо числа c (int, money, et c) выдает ошибку преобразования. Предложения?

1 Ответ

0 голосов
/ 10 июля 2020

Попробуйте сделать следующее:

with extracted_auth_comment_data AS (
  SELECT
    OrderNo, 
    TtlPrice, 
    AuthComment,
    TRY_CAST(value AS MONEY) AS auth_comment_value
  FROM     
    tableA
  CROSS APPLY STRING_SPLIT(AuthComment, '$') 
  WHERE TRY_CAST(value AS MONEY) IS NOT NULL
)
SELECT 
  OrderNo, 
  TtlPrice, 
  AuthComment
FROM extracted_auth_comment_data 
WHERE TtlPrice > auth_comment_value

Приведенный выше запрос должен возвращать нулевые строки, если значения в AuthComment всегда меньше, чем в TtlPrice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...