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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.