gpt4 book ai didi

sql - 匹配值,但 SQL Server 中的新值出错

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:45 25 4
gpt4 key购买 nike

我正在比较 Node 项目中两个不同数据库(一个 MariaDB 和一个 SQL Server)的数据,然后根据比较结果根据需要进行插入和更新。

我对这段代码有疑问,我用它来迭代 Node 中的结果,一次一个,并传入值进行检查(注意 - 我对 Node 和 JS 比 SQL 更熟悉,因此出现这个问题):

SELECT TOP 1
CASE
WHEN RM00101.CUSTCLAS LIKE ('%CUSR%')
THEN CAST(REPLACE(LEFT(LR301.DOCNUMBR, CHARINDEX('-', LR301.DOCNUMBR)), '-', '') AS INT)
ELSE 0
END AS Id,
CASE
WHEN LR301.RMDTYPAL = 7 THEN LR301.ORTRXAMT * -1
WHEN LR301.RMDTYPAL = 9 THEN LR301.ORTRXAMT * -1
ELSE LR301.ORTRXAMT
END DocumentAmount,
GETDATE() VerifyDate
FROM
CRDB..RM20101
INNER JOIN
CRDB..RM00101 ON LR301.CUSTNMBR = RM00101.CUSTNMBR
WHERE
CONVERT(BIGINT, (REPLACE(LEFT(LR301.DOCNUMBR, CHARINDEX('-', LR301.DOCNUMBR)), '-', ''))) = 589091

目前,以上内容适用于我查找匹配的记录。但是,如果我输入一个尚不存在的值 - 在下面的这一行中,如下所示:

WHERE CONVERT(BIGINT, (REPLACE(LEFT( LR301.DOCNUMBR, CHARINDEX('-', LR301.DOCNUMBR)), '-', ''))) = 789091

我收到此错误:

Error converting data type varchar to bigint.

我认为问题是,如果找不到该值,则无法将其转换为 INTEGER,因此会出错。听起来不错吗?

我理想的情况是查询能够成功执行,但在未找到匹配项时只返回 0 结果。在 JavaScript 中,我可能会执行类似 OR 子句的操作来处理此问题:

const array = returnResults || [];

但我不知道如何用 SQL 处理这个问题。

顺便说一句,SQL Server 中匹配的值是 char(21) 类型,值如下所示:00000516542-000。 MariaDB 中的值是 INT 类型。

有两个问题:

  1. 当我输入当前不匹配的值时会出现此错误吗?

  2. 如果是这样,我该如何处理这个问题,以便在未找到匹配项时仅返回 0 行?

顺便说一句,作为补充说明,有人建议使用 TRY_CONVERT,但是虽然这在 SQL Server 中有效,但当我将它与 NODE mssql 包一起使用时,它不起作用。

最佳答案

我认为问题的发生是因为 varchar 值并不总是由数字组成。您可以使用 varchar 格式本身进行比较以避免此问题:

WHERE (REPLACE(LEFT( LR301.DOCNUMBR, CHARINDEX('-', LR301.DOCNUMBR)), '-', '')) = '789091'

希望这有帮助。

编辑:根据评论中的格式,这应该可以解决问题;

WHERE REPLACE(LTRIM(REPLACE(REPLACE(LEFT( LR301.DOCNUMBR, CHARINDEX('-', LR301.DOCNUMBR)),'0',' '),'-','')),' ','0') = '789091'

关于sql - 匹配值,但 SQL Server 中的新值出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60440282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com