como aparar zeros à esquerda de texto alfanumérico na função mysql

Quais funções do MySQL existem (se houver) para cortar zeros à esquerda de um campo de texto alfanumérico?

O campo com o valor "00345ABC" precisaria retornar "345ABC".

0

7 Respostas

TRIM permitirá que você remova o rastro, líder ou todos os caracteres. Alguns exemplos sobre o uso da função TRIM no MySQL:

select trim(myfield) from (select '   test' myfield) t;
>> 'test'
select trim('0' from myfield) from (select '000000123000' myfield) t;
>> '123'
select trim(both '0' from myfield) from (select '000000123000' myfield) t;
>> '123'
select trim(leading '0' from myfield) from (select '000000123000' myfield) t;
>> '123000'
select trim(trailing '0' from myfield) from (select '000000123000' myfield) t;
>> '000000123'

Se você quiser remover apenas uma quantidade selecionada de caracteres iniciais/finais, examine as funções LEFT/RIGHT, com a combinação das funções LEN e INSTR.

0
adicionado

Se você quiser atualizar uma coluna inteira de uma tabela, você pode usar

USE database_name;
UPDATE `table_name` SET `field` = TRIM(LEADING '0' FROM `field`) WHERE `field` LIKE '0%';
0
adicionado

Você está procurando a função trim() .

Tudo bem, aqui está o seu exemplo

SELECT TRIM(LEADING '0' FROM myfield) FROM table
0
adicionado
Isso é para vários zeros também?
adicionado o autor Peter, fonte
++ Especificamente TRIM (LIDANDO '0' DE '000345ANB095')
adicionado o autor Tom Ritter, fonte
Ele deixará o valor em branco se já for '0000'.
adicionado o autor arslion, fonte

Eu acredito que você estaria melhor com isso:

SELECT TRIM(LEADING '0' FROM myField)
0
adicionado

basta remover o espaço entre TRIM (LEADING usar

SELECT * FROM my_table WHERE TRIM(LEADING '0' FROM accountid ) = '00322994' 
0
adicionado
Isso funcionará com vários zeros?
adicionado o autor Peter, fonte

GORJETA:

Se seus valores forem puramente numéricos, você também pode usar a transmissão simples, por exemplo

SELECT * FROM my_table WHERE accountid = '00322994' * 1

vai realmente converter em

SELECT * FROM my_table WHERE accountid = 322994

o que é solução suficiente em muitos casos e também acredito que o desempenho seja mais eficaz. (aviso - tipo de valor muda de STRING para INT/FLOAT).

Em algumas situações, usar alguma função de transmissão pode ser também um caminho a seguir:

http://dev.mysql.com/doc/refman/5.0/en/cast- functions.html

0
adicionado
Eu acho que + 0 é uma maneira mais comum de converter para um int do que * 1
adicionado o autor mpen, fonte
Isso é muito útil se o valor for '000000'.
adicionado o autor Septian Primadewa, fonte

SELECT TRIM (LIDANDO '0' FROM columnName ) FROM nome da tabela ; Isso também funciona corretamente

0
adicionado