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

Sql 在substring方法中如何使用Isnull(),sql,sql-server,sql-server-2008,isnull,Sql,Sql Server,Sql Server 2008,Isnull,在我的示例中,某些列的值为空。所以我无法获取其他信息(我的其他列)获取空值。所以我使用了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(CAS

在我的示例中,某些列的值为空。所以我无法获取其他信息(我的其他列)获取空值。所以我使用了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(),它都会显示错误


建议我解决这个问题。

要将空值转换为可以在字符串中使用的值,请如下使用:

... + isnull( expression, 'null') + ...
如果
expression
的值为null,则会得到字符串
null
,以在查询中使用


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

要将空值转换为可以在字符串中使用的值,可以如下使用:

... + isnull( expression, 'null') + ...
如果
expression
的值为null,则会得到字符串
null
,以在查询中使用


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

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

您可能使用了
PATINDEX(“%laks%”,ISNULL(r.Budget)”)

现在,如果找不到模式,则
PATINDEX()
返回零。 当您在由
ISNULL()
返回的空字符串中搜索模式
“%laks%”时,返回值零,这会导致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
SELECT TOP(10)'插入作业(预算)值('+
CAST(子字符串(CAST(r.Budget为VARCHAR(50)),0,PATINDEX(“%laks%”,r.Budget))*100000
+子字符串(CAST(r.Budget为VARCHAR(50)),PATINDEX(“%laks%”,r.Budget)+4,
patindex(“%数千%”,r.Budget)-patindex(“%laks%”,r.Budget)-4)*1000作为VARCHAR(50))+“)
来自组织r的要求详情
其中len(r.Budget)0


对于预算列中有NULL的值,您可以插入一些默认值,如零,现在我认为这就是正在发生的情况

您可能使用了
PATINDEX(“%laks%”,ISNULL(r.Budget)”)

现在,如果找不到模式,则
PATINDEX()
返回零。 当您在由
ISNULL()
返回的空字符串中搜索模式
“%laks%”时,返回值零,这会导致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
SELECT TOP(10)'插入作业(预算)值('+
CAST(子字符串(CAST(r.Budget为VARCHAR(50)),0,PATINDEX(“%laks%”,r.Budget))*100000
+子字符串(CAST(r.Budget为VARCHAR(50)),PATINDEX(“%laks%”,r.Budget)+4,
patindex(“%数千%”,r.Budget)-patindex(“%laks%”,r.Budget)-4)*1000作为VARCHAR(50))+“)
来自组织r的要求详情
其中len(r.Budget)0


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

您将isnull()放在哪里,请在上面的发布代码中显示。.您将isnull()放在哪里,请在上面的发布代码中显示。.当我使用单表时,它起作用。我使用join,但它显示出一些错误。len()函数在联接中不可用?当我使用单个表时,它可以工作。我使用join,但它显示出一些错误。len()函数在联接中不可用?