Sql 在substring方法中如何使用Isnull()
在我的示例中,某些列的值为空。所以我无法获取其他信息(我的其他列)获取空值。所以我使用了Isnull。但是我在下面的代码中记录了放置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
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()函数在联接中不可用?