나는 경우 최대 3 자, 즉 문자열으로 it& # 39 에서 만든 최초의 SQL Server 2008년 R2.
It 업계 최고의 제로, 만일 싶다 패드 1& # 39, & # 39 는 원래 값이. # 39, & # 39, 다음 새 값을 약간만이라도 001&. # 39, & # 39 는 있거나 원래 값이 23&. # 39, & # 39, 새로운 값이 023&. # 39, & # 39 는 있거나 원래 값이 124&. 그 후 새 값이 동일합니까 원래 값.
Sql Server 2008년 R2 를 사용하고 있습니다. T-sql 사용하여 이 어떻게 할까요?
이 사용할 경우 이미 문자열으로 필드
SELECT RIGHT('000'+ISNULL(field,''),3)
그럼 그녀의심장을 정수 수 있습니다
SELECT RIGHT('000'+CAST(field AS VARCHAR(3)),3)
>. 이 질문에 답을 요구하는 대로, 뭔가 큰 경우에만 디스테이징하는 < = 3, 스케쳐내 할 때, 이 두 정수 상수입니다 상수입니다 구체화하십시오 변경하십시오 너비입니다 수 있었습니다. 예를 들어, '& # 39 0000& # 39;; 및 VARCHAR (4)), 4 '
비록 이 질문에 대한 SQL Server 2008년 R2 는 대비하여, 누군가가 판독값 잔인하니, 2012년 이후 버전부터 된 것은 훨씬 간편해집니다 사용하여 형식.
통과시킬 수 있습니다 (표준 숫자 형식 문자열] 2 또는 사용자 정의 숫자 형식 문자열 를 형식 인수 (바딤 옵친니코프 엔드입니다 감사의 의미로).
이 질문에 대한 같은 코드 (예:
DECLARE @myInt INT = 1;
-- One way using a standard numeric format string
PRINT FORMAT(@myInt,'D3');
-- Other way using a custom numeric format string
PRINT FORMAT(@myInt,'00#');
출력입니다
001
001
declare @x int = 123 -- value to be padded
declare @width int = 25 -- desired width
declare @pad char(1) = '0' -- pad character
select right_justified = replicate(
@pad ,
@width-len(convert(varchar(100),@x))
)
+ convert(varchar(100),@x)
그러나 you& # 39, re 다루는 제외어 값, 패딩, 이 기법은 다른 제안됩니다 유수의 제로는 괜찼습니다, disk_b_s10database 작동합니다. # 39 you&, ll get 생각하신거야 다음과 같습니다.
00-123
[없는듯 너희는너희가 그들이성년에]
그래서 & 헤립;; # 39, ll %s/dbase/ext_table. you& 건너뛰려면 몇 가지 추가 # 39 의 형식을 통해 여러 Here& 제대로 되는 한 가지 방법은 음수가:
declare @x float = -1.234
declare @width int = 20
declare @pad char(1) = '0'
select right_justified = stuff(
convert(varchar(99),@x) , -- source string (converted from numeric value)
case when @x < 0 then 2 else 1 end , -- insert position
0 , -- count of characters to remove from source string
replicate(@pad,@width-len(convert(varchar(99),@x)) ) -- text to be inserted
)
참고로, '반드시 1 명 ()' 의 ' [명사] 지정해야 한다' 충분하나니 변환하십시오 페이징됩니다 varchar 수용할 수 있는 길이 변환되었습니다 결과: 버림.
다음은 Hogan& # 39 의 변형, SQL Server 에서 사용하고 있는 s 오토메이티드 익스플레스 2012년:
SELECT RIGHT(CONCAT('000', field), 3)
걱정 아닌 경우, CONCAT '그냥' 필드는 문자열으로 방관하겠나 만큼 it& # 39, ll 출력입니다 문자열으로 겁니다. 또한 만약 필드 'NULL', '가 될 수 있다' 'NULL' 결과를 가져오는 함수를 사용하여 이누얼 피하기 위해 필요할 수도 있습니다.
SELECT RIGHT(CONCAT('000', ISNULL(field,'')), 3)
이 기능을 사용할 수 있는 모든 상황에 모른다.
CREATE FUNCTION dbo.fnNumPadLeft (@input INT, @pad tinyint)
RETURNS VARCHAR(250)
AS BEGIN
DECLARE @NumStr VARCHAR(250)
SET @NumStr = LTRIM(@input)
IF(@pad > LEN(@NumStr))
SET @NumStr = REPLICATE('0', @Pad - LEN(@NumStr)) + @NumStr;
RETURN @NumStr;
END
견본입니다
SELECT [dbo].[fnNumPadLeft] (2016,10) -- returns 0000002016
SELECT [dbo].[fnNumPadLeft] (2016,5) -- returns 02016
SELECT [dbo].[fnNumPadLeft] (2016,2) -- returns 2016
SELECT [dbo].[fnNumPadLeft] (2016,0) -- returns 2016
예전 명성을 티켓 그냥 돌아보 그러니까말이야 공유할 수 있습니다.
내가 찾은 이 코드는 솔루션을 찾고. 나는 모든 버전의 경우 2016년 MSSQL 의 MSSQL 작동하잖아 확실하지 않다.
declare @value as nvarchar(50) = 23
select REPLACE(STR(CAST(@value AS INT) + 1,4), SPACE(1), '0') as Leadingzero
" 되돌려줍니다 0023"; 이 기능은 4 개 등 총 길이 STR 값이. 예 4 는 모두 4 개, 23 일, 123 STR 및 정확한 양의 제로 추가될 예정이다. 이 늘리거나 줄일 수 있습니다. 23 일 디스테이징하는 받을 필요가 없습니다.
편집: 내가 동일합니까 @Anon 게시물로의 봅니다.
왜냐하면 내가 가진 요구 사항에 대해 특정 최대 길이 (9) 이 썼다. 왼쪽 늘입니다 @pattern 있는 경우에만 입력입니다 요구사항뿐 패딩. 늘 하는 길이 정의되어 복귀하십시오 @pattern.
declare @charInput as char(50) = 'input'
--always handle NULL :)
set @charInput = isnull(@charInput,'')
declare @actualLength as int = len(@charInput)
declare @pattern as char(50) = '123456789'
declare @prefLength as int = len(@pattern)
if @prefLength > @actualLength
select Left(Left(@pattern, @prefLength-@actualLength) + @charInput, @prefLength)
else
select @charInput
1234input 되돌려줍니다
간단한 에로남이네
다음과 같습니다.
DECLARE @DUENO BIGINT
SET @DUENO=5
SELECT 'ND'+STUFF('000000',6-LEN(RTRIM(@DueNo))+1,LEN(RTRIM(@DueNo)),RTRIM(@DueNo)) DUENO
내가 만든 이 기능을 위한 주요 제로 또는 다른 어떤 충족시켜 bigint 및 원-부트 단일 문자 (최대 20 자 반환됨) 결과 길이 길이 있습니다 미만임 입력입니다 번호:
create FUNCTION fnPadNum (
@Num BIGINT --Number to be padded, @sLen BIGINT --Total length of results , @PadChar varchar(1))
RETURNS VARCHAR(20)
AS
--Pads bigint with leading 0's
--Sample: "select dbo.fnPadNum(201,5,'0')" returns "00201"
--Sample: "select dbo.fnPadNum(201,5,'*')" returns "**201"
--Sample: "select dbo.fnPadNum(201,5,' ')" returns " 201"
BEGIN
DECLARE @Results VARCHAR(20)
SELECT @Results = CASE
WHEN @sLen >= len(ISNULL(@Num, 0))
THEN replicate(@PadChar, @sLen - len(@Num)) + CAST(ISNULL(@Num, 0) AS VARCHAR)
ELSE CAST(ISNULL(@Num, 0) AS VARCHAR)
END
RETURN @Results
END
GO
--Usage:
SELECT dbo.fnPadNum(201, 5,'0')
SELECT dbo.fnPadNum(201, 5,'*')
SELECT dbo.fnPadNum(201, 5,' ')