如何从mysql函数中的字母数字文本中修剪前导零


68

有哪些mysql函数(如果有的话)来修剪字母数字文本字段中的前导零?

值为“ 00345ABC”的字段将需要返回“ 345ABC”。

Answers:


154

您正在寻找trim()函数

好了,这是你的例子

SELECT TRIM(LEADING '0' FROM myfield) FROM table

++特别是TRIM(从'000345ANB095'升至'0')
Tom Ritter

这也是多个零吗?
彼得

从双中选择trim(LEADING'0'FROM'00000A')+ 0; 为什么此输出为0而不是A?
Aniket Kapse

@AniketKapse出于同样的原因,它SELECT 'A' + 0;输出0而不是'A'。“ A”不是数字,但您正在尝试向其添加数字。因此它将两个参数都转换为数字。A不代表数字,因此将其转换为0。请阅读有关类型转换的MySQL文档。
达伦德里翁

16

小费:

如果您的值是纯数值,则还可以使用简单的转换,例如

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

实际上会转化为

SELECT * FROM my_table WHERE accountid = 322994

在许多情况下这是足够的解决方案,而且我相信性能会更有效。(警告-值类型从STRING更改为INT / FLOAT)。

在某些情况下,使用某些强制转换功能可能也是一种方法:

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


+ 0* 1
mpen

如果该值类似于“ 000000”,这将非常有用。
Septian Primadewa 2015年

11

如果要更新表的整个一列,可以使用

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

7

我相信您最好这样做:

SELECT TRIM(LEADING '0' FROM myField)

5

TRIM将允许您删除结尾,前导或所有字符。有关在MySQL中使用TRIM函数的一些示例:

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'

如果只想删除一定数量的前导/尾随字符,请结合使用LEN和INSTR功能查看LEFT / RIGHT功能


4

只是删除TRIM ( LEADING 使用之间的空间

SELECT * FROM my_table WHERE TRIM(LEADING '0' FROM accountid ) = '00322994' 

真棒!你节省我的时间!
企鹅


2
SELECT TRIM(LEADING '0' FROM *columnName*) FROM *tableName* ;

这也可以正常工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.