Usuário com melhor resposta
Pegar um range de string ou valor tipo (125.87) quero somente o 125 ou 87

Pergunta
-
Ola, espero que alguem tenha uma luz
Quero pegar de uma campo money parte do valor (string) por exemplo tenho la neste campo float 78.4521
quero fazer um select assim
Select inteiro(125.87) as Inteiro -- que retorne somente o 125
Select decimal(125.87) as decimal -- que retorne 87
usar cast vai arredondar o inteiro e como pegar somente o valor "decimal"?
Respostas
-
Clodoaldo,
Segue um exemplo.
declare @v as table (valor money) insert into @v values(125.87) insert into @v values(15.687) insert into @v values(1225.756) --select substring(cast(@v as varchar),0,patindex('%.%',cast(@v as varchar))) select cast(convert(decimal(20,3),valor)as CHAR(20)), substring(cast(convert(decimal(20,3),valor)as CHAR(20)),patindex('%.%',cast(convert(decimal(20,3),valor)as CHAR(20)))+1,len(valor)) from @v
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!- Marcado como Resposta ClodoaldoPereira quinta-feira, 1 de abril de 2010 11:50
Todas as Respostas
-
Boa Tarde,
Segue uma sugestão:
declare @v money set @v = 125.87 select case when CAST(@v as int) > @v then CAST(@v as int) - 1 else CAST(@v as int) end as parteinteira, abs(case when CAST(@v as int) > @v then CAST(@v as int) - 1 else CAST(@v as int) end - @v) as partedecimal
Certamente haverão outras sugestões, pois, tenho a impressão de que a minha não é a melhor implementação.
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comComo descobrir a data do último acesso a uma tabela ?
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!964.entry
Classifique as respostas. O seu feedback é imprescindível -
-
outra maneira... mais prático no pois nao defino uma quantidade de caracteres, divido pelo . da casa decimal.
declare @v money set @v = 125.87 select substring(cast(@v as varchar),0,patindex('%.%',cast(@v as varchar))) select substring(cast(@v as varchar),patindex('%.%',cast(@v as varchar))+1,len(@v))
att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!! -
bom dia segue mais uma sugestão:
-- declarando tabela temporária declare @t table (valor money) -- populando a tabela INSERT @t SELECT 125.87 UNION SELECT 200.00 UNION SELECT 1.01 -- resultado final separando os valores select Valor, [Inteiro] = cast(floor(valor) AS INT), [Decimal] = cast((valor - floor(valor)) * 100 AS INT) from @t
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino- Sugerido como Resposta Gustavo Maia Aguiar quinta-feira, 25 de março de 2010 13:47
-
-
Clodoaldo,
Segue um exemplo.
declare @v as table (valor money) insert into @v values(125.87) insert into @v values(15.687) insert into @v values(1225.756) --select substring(cast(@v as varchar),0,patindex('%.%',cast(@v as varchar))) select cast(convert(decimal(20,3),valor)as CHAR(20)), substring(cast(convert(decimal(20,3),valor)as CHAR(20)),patindex('%.%',cast(convert(decimal(20,3),valor)as CHAR(20)))+1,len(valor)) from @v
Att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!- Marcado como Resposta ClodoaldoPereira quinta-feira, 1 de abril de 2010 11:50
-
Clodoaldo segue mais um exemplo:
Declare @Tmp Table (Numero Decimal(12,2)) Insert Into @Tmp Values (128.94) Insert Into @Tmp Values (55.75) Insert Into @Tmp Values (597.98) Select Substring(Cast(Numero As Char),CharIndex('.',Numero)+1,len(Numero)) From @Tmp
Espero ter ajudado...
Att,
Fernando Willian de Souza Furtado
Se Útil Classifique...