在我的一些列中有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()放在哪里,它都显示错误。
建议我走出这个问题..
答案 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
。
此外,要与查询中的值进行乘法运算,首先需要将它们转换为数字。