如果SQL Server存储过程中的其他语句不起作用

时间:2019-07-04 06:45:35

标签: sql-server tsql if-statement stored-procedures

我在这里有3个条件。

  1. 仅读取9个字符的彩票号码(最多可包含10个字符)
  2. 如果最后一个(第9个)字符是点(。),则省略点
  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.B.B.B(WaferLotNo)-> PPLT2.01(仅读取第一个9个字符,如果第9个字符是点,则省略点。

PQ1H3.1。 ----> PQ1H3.1(省略最后一个点)

PQ1H。 ----> PQ1H。 (省略最后一个点)

2 个答案:

答案 0 :(得分:0)

您需要根据长度进行子字符串化。

   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

答案 1 :(得分:0)

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