[英]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.