0

在我的一些列中有 NULL 值。所以我无法获得其他信息(我的其他列)获得 NULL 值。所以我使用Isnull。但是我记录了我在下面的代码中放置 Isnull() 的位置。

我的代码是

SELECT TOP(10) 'INSERT INTO jobs(Budget) VALUES('+

    CAST(SUBSTRING(CAST(r.Budget AS VARCHAR(50)), 0, PATINDEX('%laks%', r.Budget))*100000

        + SUBSTRING(CAST(r.Budget AS VARCHAR(50)), PATINDEX('%laks%', r.Budget) + 4, 
        patindex('%Thousands%', r.Budget) - PATINDEX('%laks%', r.Budget) - 4)* 1000 AS VARCHAR(50))+')'

FROM requirementsdetailsfororganization r

在上面的代码中,我以十万和千为单位计算薪水。无论我把 Isnull() 放在哪里,它都会显示错误。

建议我摆脱这个问题..

4

2 回答 2

2

现在这就是我认为正在发生的事情

你可能用过PATINDEX('%laks%', ISNULL(r.Budget,''))

如果未找到模式,现在PATINDEX()返回零。当您'%laks%在返回的空字符串中搜索模式 '时ISNULL(),会返回零值,这会导致 SUBSTRING() 函数出现错误,例如索引超出范围

解决方案之一是过滤掉预算列中具有空值或空值的行。所以你可以添加 LEN() 函数并检查它是否不等于零。请参阅WHERE下面的查询中添加的条件。

SELECT TOP(10) 'INSERT INTO jobs(Budget) VALUES('+

    CAST(SUBSTRING(CAST(r.Budget AS VARCHAR(50)), 0, PATINDEX('%laks%', r.Budget))*100000

        + SUBSTRING(CAST(r.Budget AS VARCHAR(50)), PATINDEX('%laks%', r.Budget) + 4, 
        patindex('%Thousands%', r.Budget) - PATINDEX('%laks%', r.Budget) - 4)* 1000 AS VARCHAR(50))+')'

FROM requirementsdetailsfororganization r
where len(r.Budget)<>0


对于预算列中具有 NULL 的值,您可以插入一些默认值,例如零

于 2013-04-18T05:54:50.750 回答
1

要将 null 值转换为可以在字符串中使用的值,您可以像这样使用它:

... + isnull( expression, 'null') + ...

如果 的值为expressionnull,则您将获取该字符串null以在查询中使用。

此外,要与查询中的值相乘,首先需要将它们转换为数字。

于 2013-04-18T05:46:58.343 回答