Preciso converter o campo de dados int em nvarchar com zeros à esquerda
exemplo:
1 convertido para '001'
867 converter para '000867', etc.
THX.
Esta é a minha resposta 4 horas depois ...
Eu testei este T-SQL Script e funcionou bem para mim!
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED
SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED
Eu criei esta função de usuário
Código T-SQL:
CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) RETURNS nvarchar(20)
AS
BEGIN
-- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number
-- @intlen contains the string size to return
IF @intlen > 20
SET @intlen = 20
RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(20),@intVal))))
+ CONVERT(nvarchar(20),@intVal)
END
Exemplo:
SELECT dbo.CIntToChar (867, 6) AS COD_ID
RESULTADO
000867
sql-server
stored-procedures
RicardoBalda
fonte
fonte
Respostas:
Experimente isto:
select right('00000' + cast(Your_Field as varchar(5)), 5)
Ele obterá o resultado em 5 dígitos, ex: 00001, ...., 01234
fonte
select right('00000' || cast(Your_Field as varchar(5)), 5)
Você também pode usar a função FORMAT () introduzida no SQL Server 2012 . http://technet.microsoft.com/library/hh213505.aspx
fonte
Use
REPLICATE
para que você não precise codificar todos os zeros à esquerda:RESULTADO:
fonte
Não para High-Jack esta pergunta, mas a nota precisa ser feita que você precisa usar (N) VARCHAR em vez de (N) CHAR tipo de dados.
O segmento acima não produzirá a resposta correta do SQL 2005
Acima do segmento, produzirá a resposta desejada do SQL 2005
O varchar fornecerá o comprimento de prefixo desejado imediatamente. Onde o tipo de dados de comprimento fixo exigirá designação e ajustes de comprimento.
fonte
Eu gosto de usar
isso me dá
fonte
RIGHT(1000+Number, 3)
- bom, curto e rápidoO tipo de dados "int" não pode ter mais de 10 dígitos, além disso, a função "Len ()" funciona em ints, portanto, não há necessidade de converter o int em uma string antes de chamar a função len ().
Por último, você não está levando em consideração o caso em que o tamanho do seu int> o número total de dígitos que você deseja preencher (@intLen).
Portanto, uma solução mais concisa / correta é:
fonte
Não é muito elegante, mas adiciono um valor definido com o mesmo número de zeros à esquerda que desejo ao numérico que desejo converter e uso a função DIREITA.
Exemplo:
fonte
Solução de uma linha ( per se ) para SQL Server 2008 ou superior:
A multiplicação por
SIGN
expressão é equivalente aMAX(0, @DesiredLenght-LEN([Column]))
. O problema é queMAX()
aceita apenas um argumento ...fonte
Encontrei um bom artigo aqui :
fonte
BTW se for uma coluna int então ainda não vai manter os zeros Basta fazê-lo na camada de apresentação ou se realmente precisar no SELECT
fonte
Teve mesmo problema, foi assim que resolvi ... Simples e elegante. O "4" é o comprimento que a string deve ter, não importa o comprimento do inteiro passado, ele será preenchido com zeros até "4".
fonte
No meu caso, eu queria que meu campo tivesse zeros à esquerda em um campo de 10 caracteres (NVARCHAR (10)). O arquivo de origem não tem os zeros iniciais necessários para se juntar a outra tabela. Fiz isso simplesmente por estar no SQL Server 2008R2:
Defina Field = right (('0000000000' + [Field]), 10) (Não é possível usar Format (), pois isso é anterior ao SQL2012)
Executado isso contra os dados existentes. Portanto, desta forma, 1 ou 987654321 ainda preencherá todos os 10 espaços com zeros à esquerda.
Como os novos dados estão sendo importados e despejados na tabela por meio de um banco de dados do Access, posso usar o Formato ([Campo], "0000000000") ao anexar do Access à tabela do servidor SQL para quaisquer novos registros.
fonte
- Sem o 'RTRIM', o valor retornado é
3__
!!!- Sem o 'RTRIM', o valor retornado é
867___
!!!fonte
Usar
RIGHT
é uma boa opção, mas você também pode fazer o seguinte:onde
N
é o número total de dígitos que você deseja exibir. Portanto, para um valor de 3 dígitos com zeros à esquerda (N = 3
):ou alternadamente
O que isso está fazendo é adicionar o valor desejado a uma potência de 10 grande o suficiente para gerar zeros à esquerda suficientes e, em seguida, cortar o 1 à esquerda.
A vantagem desta técnica é que o resultado terá sempre o mesmo comprimento, permitindo o uso de em
SUBSTRING
vez deRIGHT
, o que não está disponível em algumas linguagens de consulta (como HQL).fonte
Isso funciona para mim em MYSQL:
Por exemplo:
Espero que isso ajude. Cumprimentos
fonte
Funciona em SQLServer
Aproveitar
fonte
Eu estava me perguntando, isso seria útil para você?
fonte