Если в SQL Server не работает хранимая процедура Else - PullRequest
0 голосов
/ 04 июля 2019

У меня есть 3 условия здесь.

  1. Для чтения только 9 символов LotNo (может содержать до 10 символов)
  2. Пропускать точку, если последний (9-й) символ - точка (.)
  3. Но некоторые LotNo имеют менее 9 символов, и нам нужно удалить точку, если последний символ (.)

Я использую оператор If в хранимой процедуре.Я использовал Substring, чтобы получить первые 9 символов.Результат выглядит хорошо для первых двух условий, но он не работает для третьего условия.

DECLARE @ShortWaferLotNo VARCHAR(50)

set @ShortWaferLotNo = SUBSTRING(@WaferLotNo, 0, 10);

if RIGHT(@ShortWaferLotNo, 1) = '.'
begin
  set @ShortWaferLotNo = SUBSTRING(@WaferLotNo, 0, 9);
end
else if RIGHT(@ShortWaferLotNo, 1) = '.'
begin
  set @ShortWaferLotNo = STUFF(@WaferLotNo,DATALENGTH(@WaferLotNo), 1, '') 
end
else 
begin
  set  @ShortWaferLotNo='' 
end

PPLT2.01.BBB (WaferLotNo) -> PPLT2.01 (чтение только 1-го символа 9 и отсутствие точки)если 9-й символ - точка.

PQ1H3.1. ----> PQ1H3.1 (пропустить последнюю точку)

PQ1H. ----> PQ1H. (пропустить последнийточка)

Ответы [ 2 ]

0 голосов
/ 05 июля 2019
I managed to solve it like below : 

begin
declare @WaferLotNo as varchar(100)
declare @ShortWaferLotNo as varchar(100)
select @WaferLotNo='PJY.9.B.B.' --PQ1H3.1.
if DATALENGTH(@WaferLotNo)>=9
    set @ShortWaferLotNo = SUBSTRING(@WaferLotNo, 0, 10);
    if RIGHT(@ShortWaferLotNo, 1) = '.'
    begin
        set @ShortWaferLotNo = SUBSTRING(@WaferLotNo, 0, 9);
    end 
if DATALENGTH(@WaferLotNo)<9
        set @ShortWaferLotNo = SUBSTRING(@WaferLotNo, 0, 9);
        if RIGHT(@ShortWaferLotNo, 1) = '.'
        begin
           set @ShortWaferLotNo = STUFF(@WaferLotNo,DATALENGTH(@WaferLotNo), 1, '') 
        end
end

print @ShortWaferLotNo
0 голосов
/ 04 июля 2019

Вам нужно подстроку в зависимости от длины.

   DECLARE @ShortWaferLotNo VARCHAR(50)

select @ShortWaferLotNo = 'PQ1H3.1.'

set @ShortWaferLotNo = SUBSTRING(@ShortWaferLotNo, 0, 10)

print @ShortWaferLotNo

if RIGHT(@ShortWaferLotNo, 1) = '.'
begin
  set @ShortWaferLotNo = SUBSTRING(@ShortWaferLotNo, 0, len(@ShortWaferLotNo));
end
else 
begin
  set  @ShortWaferLotNo='' 
end

print @ShortWaferLotNo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...