在substring方法中如何使用Isnull()

时间:2013-04-18 05:38:09

标签: sql sql-server sql-server-2008 isnull

在我的一些列中有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

在上面的代码中,我计算了10万卢比和数千的工资。无论我把Isnull()放在哪里,它都显示错误。

建议我走出这个问题..

2 个答案:

答案 0 :(得分: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


对于Budget列中具有NULL的值,您可以插入一些默认值,如Zero

答案 1 :(得分:1)

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

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

如果expression的值为null,则会在查询中使用字符串null

此外,要与查询中的值进行乘法运算,首先需要将它们转换为数字。