----------------------------------------------------------
-- FUNCAO:
-- retorno um string de 15 caracter de um real com 12 inteiros e 2 decimais + o sinal multiplicado por 100
-- ex: -156.36 = -00000000015636
----------------------------------------------------------
-- apaga a função
IF EXISTS (SELECT NAME,TYPE FROM SYSOBJECTSWHERE NAME = 'NUMERO100' AND TYPE = 'FN')
DROP FUNCTION dbo.NUMERO100
GO
-- teste da função
SELECT dbo.NUMERO100(123.5)
-- uso em uma procedure
SET
@RetornoSPGravaSaldo = dbo.NUMERO100(@NOVO_VLFATURA)
-- cria a função
create FUNCTION dbo.NUMERO100(@VALOR DECIMAL(18,2))
RETURNS VARCHAR(15) AS
BEGIN
DECLARE @VLR_INTEIRO bigint,
@VLR_DECIMAL bigint,
@VLR_STR_INTEIRO VARCHAR(14),
@VLR_STR_DECIMAL VARCHAR(2),
@SINAL char(1),
@VRETORNO VARCHAR(15)
SET
@SINAL = '0'
IF @VALOR<0
SET
@SINAL = '-'
-- transforma o valor em positivo
SET
@VALOR = ABS(@VALOR)
-- convert o valor em um inteiro
SET
@VLR_INTEIRO = CAST(@VALOR AS bigint)
-- pega a parte decimal e converte em um inteiro
SET
@VLR_DECIMAL = CAST((@VALOR*100-@VLR_INTEIRO*100) AS bigint)
-- concatena a parte inteira com a decimal
SELECT
@VLR_STR_INTEIRO = CONVERT(VARCHAR(14),@VLR_INTEIRO)),
@VLR_STR_DECIMAL = CONVERT(VARCHAR(2),@VLR_DECIMAL))
-- tira os espaços a direita e a esquerda
SELECT
@VLR_STR_INTEIRO = RTRIM(LTRIM(@VLR_INTEIRO)),
@VLR_STR_DECIMAL = RTRIM(LTRIM(@VLR_DECIMAL))
-- preenche a string de decimais com zeros a esquerta
SET
@VLR_STR_DECIMAL = replicate('0',
2-len(@VLR_STR_DECIMAL))+
@VLR_STR_DECIMAL
SET
@VRETORNO = @VLR_STR_INTEIRO+@VLR_STR_DECIMAL
SET
@VRETORNO = @SINAL+
replicate('0',
14-len(@VRETORNO))+
@VRETORNO
-- retorna o valor (string)
RETURN @VRETORNO
END