簡體   English   中英

如果SQL Server存儲過程中的其他語句不起作用

[英]If Else Statement in SQL Server stored procedure not working

我在這里有3個條件。

  1. 只能讀取9個字符的彩票號碼(最多可以包含10個字符)
  2. 如果最后一個(9th)字符是點(。),則省略點
  3. 但是某些LotNo的字符數少於9個,如果最后一個字符是(。),我們需要刪除點。

我在存儲過程中使用If else語句。 我使用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(僅讀取第一個9個字符,如果第9個字符是點,則省略點。

PQ1H3.1。 ----> PQ1H3.1(省略最后一個點)

PQ1H。 ----> PQ1H。 (省略最后一個點)

您需要根據長度進行子字符串化。

   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
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM