Sql server sql server中的子字符串

Sql server sql server中的子字符串,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有一个字符串的格式。(如902.5) 需要在SQLServer2008中将其拆分并收集到单独的变量中 DECLARE @Core VARCHAR(10)='902.5', @OrgNumber VARCHAR(6) = NULL, @DeptNumber VARCHAR(2) = NULL IF (NULLIF(@Core, '')) IS NOT NULL BEGIN S

我有一个字符串的格式。(如902.5)
需要在SQLServer2008中将其拆分并收集到单独的变量中

    DECLARE  
       @Core VARCHAR(10)='902.5',  
       @OrgNumber VARCHAR(6) = NULL,  
       @DeptNumber VARCHAR(2) = NULL

        IF (NULLIF(@Core, '')) IS NOT NULL
        BEGIN
             SELECT @OrgNumber =SUBSTRING(@Core, 1, CHARINDEX('.', @Core) - 1),
                   @DeptNumber =SUBSTRING(@Core, CHARINDEX('.', @Core) + 1, LEN(@Core))

             SELECT @OrgNumber = upper(nullif(ltrim(nullif(rtrim(@OrgNumber ), '')), '')), 
@DeptNumber = nullif(ltrim(nullif(rtrim(@DeptNumber ), '')), '')  
        END
但是,这不适用于仅包含组织参考(无部门参考)的情况,例如902

如何在同一语句中优雅地处理大小写?

使用
PARSENAME
函数

DECLARE @Core VARCHAR(50)= '902.2'

SELECT Parsename(@Core, CASE WHEN Charindex('.', @Core) > 0 THEN 2 ELSE 1 END) AS OrgNumber,
       Parsename(@Core, CASE WHEN Charindex('.', @Core) > 0 THEN 1 ELSE 2 END) AS DeptNumber 

已更新您的查询。另外,请注意,
IF(NULLIF(@Core,”)不是NULL
是不正确的

 DECLARE @Core       VARCHAR(10)='902', 
        @OrgNumber  VARCHAR(6) = NULL, 
        @DeptNumber VARCHAR(2) = NULL 

IF @Core IS NOT NULL 
  BEGIN 
      SELECT @OrgNumber = CASE 
                            WHEN Charindex('.', @Core) > 0 THEN 
                            Substring(@Core, 1, Charindex('.', @Core) 
                                                - 1) 
                            ELSE Substring(@Core, 1, Len(@Core)) 
                          END, 
             @DeptNumber = CASE 
                             WHEN Charindex('.', @Core) > 0 THEN 
                             Substring(@Core, 
                             Charindex('.', @Core) + 1 
                             , Len(@Core)) 
                             ELSE NULL 
                           END 

      SELECT @OrgNumber = Upper(NULLIF(Ltrim(NULLIF(Rtrim(@OrgNumber), '')), '') 
                          ), 
             @DeptNumber = NULLIF(Ltrim(NULLIF(Rtrim(@DeptNumber), '')), '') 
  END 

SELECT @OrgNumber, 
       @DeptNumber 

它总是相同的格式吗?是的-它将始终是x.y,或者只是XParName从右到左工作-如果缺少分隔符“.”,它会将组织编号分配给dept ref。