2015-09-07 2 views
1

У меня есть строка в формате. (Например, 902,5)
нужно разделить и собрать это в отдельных переменных в SQL SERVER 2008.sub string в sql server

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 

Однако это не обрабатываем случай, когда содержит Org реф только (без отдела реф), например 902
Как обрабатываю ли я дело в рамках одного и того же заявления?

+0

Всегда ли такой же формат? –

+0

Да - всегда будет x.y или просто x – IUnknown

ответ

0

Обновленный запрос. Также обратите внимание, что ваш IF (NULLIF(@Core, '')) IS NOT 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 
2

Использование 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 
+0

PARSENAME работает справа налево - и назначит номер org для dept ref, если разделитель '.' пропал, отсутствует. – IUnknown