É possível converter texto em número dentro da consulta MySQL? Eu tenho uma coluna com um identificador que consiste em um nome e um número no formato de "nome-número". A coluna possui o tipo VARCHAR. Eu quero classificar as linhas de acordo com o número (linhas com o mesmo nome), mas a coluna é classificada de acordo com a ordem dos caracteres, ou seja,
name-1
name-11
name-12
name-2
Se eu cortar o número, posso converter o número 'varchar' no número 'real' e usá-lo para classificar as linhas? Eu gostaria de obter a seguinte ordem.
name-1
name-2
name-11
name-12
Não posso representar o número como uma coluna separada.
editado 2011-05-11 9:32
Eu encontrei a seguinte solução ... ORDER BY column * 1
. Se o nome não contiver nenhum número, é salvo usar essa solução?
name
pode ser qualquer sequência de letras.Respostas:
Isso deve funcionar:
fonte
Você pode usar
SUBSTRING
eCONVERT
:Onde
name_column
está a coluna com os valores "nome-". EleSUBSTRING
remove tudo antes do sexto caractere (ou seja, o prefixo "nome-") e depoisCONVERT
converte a esquerda para um número inteiro real.ATUALIZAÇÃO : Dadas as mudanças nas circunstâncias nos comentários (ou seja, o prefixo pode ser qualquer coisa), você terá que incluir um
LOCATE
:Obviamente, isso pressupõe que o prefixo não numérico não possui hífens, mas o comentário relevante diz que:
então isso deve ser uma suposição segura.
fonte
SUBSTRING(name_column, 6)
. Eu sei, você postou quando ele não nos contou isso ...Basta usar o CAST,
O tipo para o resultado da conversão pode ser um dos seguintes valores:
fonte
Você pode usar CAST () para converter de string para int. por exemplo
SELECT CAST('123' AS INTEGER);
fonte
SELECT CAST('123' AS SIGNED INTEGER);
ouSELECT CAST('123' AS UNSIGNED INTEGER);
fazê-lo funcionar.fonte
uma maneira simples SELECIONE '123' + 0
fonte
Para obter o número, tente com e
SUBSTRING_INDEX(field, '-', 1)
depois converta.fonte
se sua chave primária for uma string em um formato como
ABC / EFG / EE / 13/123 (número de sequência),
esse tipo de string poderá ser facilmente usado para classificar com o delimitador ("/")
podemos usar a seguinte consulta para solicitar uma tabela com este tipo de chave
fonte
fonte
Uma maneira genérica de fazer:
fonte