Fórum Comando SQL #46494
02/09/2004
0
ex:
29814 --> 298
508550 --> 5085
o campo e inteiro e uso firebird 1.5
Rjcerri
Curtir tópico
+ 0Posts
02/09/2004
Vinicius2k
Vc quer apenas eliminar ? não precisa fazer nada com o ´resto´?
Se for...
update TABELA set CAMPO = cast((CAMPO / 100) as integer);
ou simplesmente :
update TABELA set CAMPO = (CAMPO / 100);
T+
Gostei + 0
02/09/2004
Rjcerri
Gostei + 0
02/09/2004
Vinicius2k
Aonde exatamente vc está executando e qual a instrução ? Se seu campo for [b:2fd1323c29]realmente INTEGER[/b:2fd1323c29] não existe arrendondamento... ele é simplesmente truncado... por via das dúvidas acabei de testar os exemplos diretamente no banco com IBExpert e dentro de uma aplicação usando dbExpress e IBX... e com um select :
select (CAMPO/100) as CAMPO_TRUNCADO from TABELA
Na base tenho : 199, 299 e 399 e o retorno é 1, 2 e 3...
T+
Gostei + 0
02/09/2004
Rjcerri
Gostei + 0
02/09/2004
Vinicius2k
Honestamente, não sei o que pode ser... já fiz e refiz os testes aqui e sempre tenho o resultado q vc precisa... seja com selects ou com update set ele sempre trunca...
Eu mesmo, em meus projetos, já utilizei-me disso...
T+
Gostei + 0
02/09/2004
Afarias
T+
Gostei + 0
02/09/2004
Vinicius2k
E eu use isso semana passada migrando uma base Clipper (Numeric), exportado SDF os campos de ID ficaram com 2 decimais e eu tive que corrigir...
Será que eh diferença de versão? Eu nem usei cast... fiz o update set direto com o campo / 100... só passei a instrução com cast para o colega pq julguei q era mais correta, mesmo a outra tendo funcionado...
T+
Gostei + 0
02/09/2004
Vinicius2k
[quote:16bf66501d=´Firebird QuickStartGuide.pdf, página 19,´][b:16bf66501d][u:16bf66501d]Division of an integer by an integer[/u:16bf66501d][/b:16bf66501d]
Firebird accords with the SQL standard by [color=red:16bf66501d]truncating the result (quotient) of an integer/integer calculation to
the next lower integer[/color:16bf66501d]. This can have bizarre results unless you are aware of it.
For example, this calculation is correct in SQL:
1 / 3 = 0
If you are upgrading from a RDBMS which resolves integer/integer division to a float quotient, you will need to
alter any affected expressions to use a float or scaled numeric type for either dividend, divisor, or both.
For example, the calculation above could be modified thus in order to produce a non-zero result:
1.000 / 3 = 0.333[/quote:16bf66501d]
Só não sei dizer se é só para o FB 1.5...
T+
Gostei + 0
03/09/2004
Afarias
Ahhh.. bom :)
T+
Gostei + 0
03/09/2004
Rjcerri
Gostei + 0
03/09/2004
Vinicius2k
Como eu disse, honestamente, não sei o que pode estar acontecendo, já que comigo funciona...
afarias, vc pode realizar este teste também?
update tabela set campo = campo/100
será que só dá certo comigo? :roll:
Gostei + 0
03/09/2004
Afarias
hehehe... não precisa... neste caso é ´truncado´ sim... não é truncado de verdade, é apenas q é feito uma divisão nos inteiros (pq são 2 números inteiros) e dai...
O q falei q era arrendondado éra o CAST(n as INTEGER)
:D
T+
Gostei + 0
04/09/2004
Vinicius2k
Talvez isso já seja ´apelação´, mas vamos lá :
Colega,
Declare a UDF (Tools->Script Executive no IBExpert):
DECLARE EXTERNAL FUNCTION DIV INTEGER, INTEGER RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT ´IB_UDF_div´ MODULE_NAME ´ib_udf´
E tente rodar o update :
update TABELA set CAMPO = cast(div(CAMPO, 100) as integer)
Será que agora vai? :roll:
T+
Gostei + 0
04/09/2004
Afarias
update tabela set campo = campo / 100
caso o CAMPO sesa NUMERIC/FLOAT::
update tabela set campo = cast(campo as integer) / 100
Nestes casos não tem como ´arredondar´ pq o IB (ou FB) fará uma divisão nos inteiros (não há casas decimais)!
T+
Gostei + 0
06/09/2004
Rjcerri
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)