sql转换问题:比较varchar和money的选定部分

d7v8vwbk  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(321)

我有一个表,我不能修改,我需要做两列之间的比较。
第一列 TtlPrice 有一个 money 数据类型
第二个 AuthComments 有一个 varchar(max) 数据类型
我们正在表格中输入一条评论 AuthComments 列,并在末尾添加“$1.00”(或我们授权的任何价格)。我想确保 TtlPrice 不高于市场上的价格 AuthComment 现场。
以下是数据示例:

  1. OrderNo | TtlPrice | AuthComment
  2. --------+----------+----------------------
  3. 12345 | 51.74 | Auth by Sue- $62.84

以下是我当前的查询:

  1. SELECT
  2. OrderNo,
  3. TtlPrice,
  4. AuthComment
  5. FROM
  6. tableA
  7. WHERE
  8. (CAST(TtlPrice AS VarChar) > CAST(SUBSTRING(AuthComments,
  9. CHARINDEX('$', AuthComments) + 1,
  10. LEN(AuthComments) - CHARINDEX('$', AuthComments)) AS varchar))

以上基于数据的结果应该是0,因为 TtlPrice 小于 AuthComment 价格。但事实并非如此,它只能产生一行结果。我认为这不是比较 varchar 正确地说,但是试图转换为任何类型的数字(int、money等)都会引发转换错误。建议?

camsedfj

camsedfj1#

尝试执行以下操作:

  1. with extracted_auth_comment_data AS (
  2. SELECT
  3. OrderNo,
  4. TtlPrice,
  5. AuthComment,
  6. TRY_CAST(value AS MONEY) AS auth_comment_value
  7. FROM
  8. tableA
  9. CROSS APPLY STRING_SPLIT(AuthComment, '$')
  10. WHERE TRY_CAST(value AS MONEY) IS NOT NULL
  11. )
  12. SELECT
  13. OrderNo,
  14. TtlPrice,
  15. AuthComment
  16. FROM extracted_auth_comment_data
  17. WHERE TtlPrice > auth_comment_value

如果authcoment中的值总是小于ttlprice中的值,则上述查询应返回零行。

展开查看全部

相关问题