使用len()sql server时使用连接的正确方法

时间:2013-04-18 09:43:41

标签: sql-server sql-server-2008 join

我需要加入一个或两个表。一张桌子有薪水场。所以我也做了一些计算,如果该字段为null意味着它返回0.所以我使用 len()。但我无法访问正确的值。当我在 len()条件之前使用join时,我有一个结果。但是结果id列无法像 1,4,46,89, ......那样。我不知道为什么。

我的查询是,

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

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

    FROM requirementsdetailsfororganization o 
    right Join Requirementsregistereddetails AS r ON r.registereddate=r.registereddate
    left join Requirement_Contact_Details as rc ON rc.RequirementID=o.requirementId
    **where len(o.Budget)<>0** 

在上面的代码中,我使用了这个条件。但为什么它会显示这种类型的价值观。

MY输出:

插入作业( 1 ,85000)

插入作业( 3 ,205000)

插入作业( 4 ,0(空时))

插入作业( 16 ,145000)

插入作业( 18 ,110000)

在上一个结果中,我粗体值是Id。它是无序的,当我使用len()

时,在值范围内会遗漏一些值

有人向我提出我的问题吗?

1 个答案:

答案 0 :(得分:0)

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

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

    FROM requirementsdetailsfororganization o 
    right Join Requirementsregistereddetails AS r ON r.registereddate=r.registereddate
    left join Requirement_Contact_Details as rc ON rc.RequirementID=o.requirementId
    where len(isnull(o.Budget, ":D"))<>0