Jump to content
skysurf

converter varchar em inteiro

Recommended Posts

skysurf

Boa noite. Gostava de uma ajuda, tenho pouca experiência em sql:

tenho uma tabela com vários códigos postais que são do tipo (varchar(255)) : ex:

2560-123

3002-125

3100-623

1023-246

5345-345

etc.

O problema é que preciso de converte-los em 4 dígitos e depois dividi por 1000 os códigos postais e contar quantos existem nesses intervalos de tempo (ex entre 100 e 2000, 2000 e 3000 etc)

SELECT CONVERT(varchar(4), cpostal) FROM clientes (estou a utilizar esta para converter para 4 dígitos)

CAST(cpostal AS INT) FROM clientes FROM clientes (estou a utilizar esta para converter para inteiro)

mas não as consigo executar-las ao mesmo tempo... tipo:

SELECT CONVERT (varchar(4),cpostal), CAST(cpostal AS INT) FROM clientes

dá Erro!

Gostaria que alguém me ajudasse, obrigado e depois como faço para dividir por 1000 e apresentar o intervalo de tempo

Obrigado

Share this post


Link to post
Share on other sites
Knot

Não se se te ajuda mas consegues fazer o cast tambem desta forma:

SELECT (cpostal *1) FROM clientes

  • Vote 1

Share this post


Link to post
Share on other sites
skysurf

Não se se te ajuda mas consegues fazer o cast tambem desta forma:

SELECT (cpostal *1) FROM clientes

obrigado, mas não funciona pq dá erro na conversão (Conversion failed when converting the varchar value '2810-308' to data type int.)

Share this post


Link to post
Share on other sites
Knot

Terás que "cortar" primeiro os 4 elementos e só depois fazer o CAST.

Algo assim:

SELECT CONVERT (varchar(4),cpostal) *1 from clientes

ou assim:

SELECT (CONVERT (varchar(4),cpostal) *1) from clientes

Na teoria funciona, mas nunca testei, posso estar a dar um mau exemplo...

Share this post


Link to post
Share on other sites
HappyHippyHippo

... e contar quantos existem nesses intervalos de tempo ...

que intervalo de tempo ???

ps :

desconfio que o problema é descobrir o número de códigos postais entre os limites [0 ... 999], [1000 ... 1999], etc ...

e para isso não é necessário andar a converter nada

 select concat(rpad(prefix, 4, '0'), '-', rpad(prefix, 4, '9')) as cp_range,
        count(prefix) as quantity
   from (select substring(lpad(substring(cp, 1, locate('-', cp) - 1), 4, '0'), 1, 1) as prefix
           from cp) as aux
group by prefix

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.