Warm tip: This article is reproduced from serverfault.com, please click

其他-无需在mysql中进行修整的LPAD

(其他 - LPAD without trimming in mysql)

发布于 2019-02-27 15:33:36

我想找到一种方法来在ID的开头添加0而不修整它:

我目前使用的LPAD(id,4,"0")女巫工作正常,直到9999

  • 要求 : SELECT LPAD(12345,4,"0");
  • 结果除外: 12345
  • 结果 : 1234

我正在寻找一个谁做的请求 LPAD(id, MAX(LENGTH(id),4), "0")

我找到了,SELECT IF(LENGTH(12345)>4, 12345, LPAD(12345, 4, "0"));但我更喜欢如果该4标签位于单个位置(以便更轻松地在其他地方使用它)。

  • 是否有内置功能可以满足我的需求?
  • 还是MAX()在这种情况下可以使用的功能的替代方案
  • 还是应该坚持该IF(LENGTH)解决方案及其缺点?

编辑 :

ZEROFILL不符合我的需要,因为我还需要不带0s的id 我主要使用不带ID的ID LPAD(),但这样做的时候,我会使用带前缀的ID CONCAT("PFX", LPAD(id,4,"0"))

感谢你的帮助

PS:请告诉我我做错了什么,这是我第一次在这里问。

Questioner
Pierre Lezan
Viewed
11
Boshentz 2021-01-20 21:19:27

好吧,我对LPAD也有类似的问题,它会将数字截短至其焊盘长度。根据https://dev.mysql.com/doc/refman/8.0/zh-CN/string-functions.html#function_lpad的预期结果。

据我所知,没有人提到可以解决我同样问题的答案:

LPAD(id, GREATEST(LENGTH(id), 4), "0")

它按预期工作。id用0填充少于4个字符的任何',并返回大于4个字符的不变id'。

我将答案留给其他人,以后他们会发现这个问题。