приведение в SQL Server 2005 - PullRequest
       8

приведение в SQL Server 2005

0 голосов
/ 13 января 2011

я хочу добавить 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

Ответы [ 3 ]

4 голосов
/ 13 января 2011
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
1 голос
/ 13 января 2011

Заполнение влево обычно выполняется с помощью 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
1 голос
/ 13 января 2011
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, что также заставляет 2-ю ветвь стать результатом INT(из 1).Когда результат [INT] затем присваивается переменной @PostMT Char (2), именно в этот момент INT (1) преобразуется в «1» (обратите внимание на пробел из-за char2 фиксированной ширины)

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