簡體   English   中英

在SQL Server 2005中投射

[英]cast in sql server 2005

我想在數字上加0

DECLARE  @AccPD Char(6)
DECLARE  @PostMT Char(2)

SELECT @accpd ='201102'

select @PostMT  = case when substring(@accpd,5,2) = '01'
  then substring(@accpd,5,2) + 11
  else CAST('00' AS Char(2))  + substring(@accpd,5,2)-1
 end 

SELECT @PostMT 

這應該返回值01而不是1

DECLARE @Number INT

SET @Number = 9

Select '0' + CAST(@Number as VarChar(30))

將輸出'09'

我會提供更多具體的幫助,但對於我自己的一生,我真的無法理解您要在這里實現的目標。

此外,如果您只想填充一個Int並返回一個字符串,則可以使用以下函數:

/*
   Usage: 
   select dbo.fn_PadInt(3, '0', 5)

   Returns '00003'
*/
CREATE FUNCTION fn_PadInt
(
    @Input Int,
    @PadCharacter Char(1),
    @Length Int
)
RETURNS VarChar(20)
AS
BEGIN

    DECLARE @InputLen INT 
    DECLARE @Output VarChar(20)

    SET @InputLen = LEN(@Input)
    SET @Output = CAST(@Input as VarChar(20))

    WHILE @InputLen < @Length
       BEGIN
           SET @Output = @PadCharacter + @Output
           SET @InputLen = @InputLen + 1
       END

    Return @Output

END
DECLARE  @AccPD Char(6)
DECLARE  @PostMT Char(2)

SELECT @accpd ='201102'

select @PostMT  = case when substring(@accpd,5,2) = '01'
  then right(substring(@accpd,5,2) + 11, 2)
  else right(100 + substring(@accpd,5,2)-1, 2)
 end 

SELECT @PostMT

問題是當您使用

  then substring(@accpd,5,2) + 11

在CASE語句的第一個分支中,+ 11產生INT結果,這也強制第二個分支成為INT結果(為1)。 然后將[INT]結果賦給變量@PostMT Char(2)時,正是在這一點上將INT(1)轉換為“ 1”(注意,由於定長字符char2的原因,該空格)

通常使用REPLICATE完成向左填充

DECLARE  @AccPD Char(6)
DECLARE  @PostMT Char(2)

SELECT @accpd ='201102'

select @PostMT  = case when substring(@accpd,5,2) = '01'
  then substring(@accpd,5,2) + 11
  else  substring(@accpd,5,2)-1
 end 


SET @PostMT =  REPLICATE('0', 2 - LEN(@PostMT)) + @PostMT
SELECT @PostMT

暫無
暫無

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

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