我有一些数据存储为无符号 tinyint。显示它时,我希望它仅在长度为 1 位时才用零填充。LPAD(CAST(NUMBER AS CHAR CHARSET UTF8),2,'0')
当我有三位数长号码时,我遇到了问题。我怎样才能得到我要找的东西?
表中数据示例:
NUMBER
1
2
3
...
10
11
...
101
102
使用 LPAD 运行时我目前得到的结果
LPAD_NUMBER
01
02
03
...
10
11
...
10
10
我想要的是
UNKNOWN
01
02
03
...
10
11
...
101
102
我使用的解决方案
select case
when number between 0 and 9 then
LPAD(CAST(number AS CHAR CHARSET UTF8), 2, '0')
else
CAST(number AS CHAR CHARSET UTF8)
end as newNum;
这让我得到了我正在寻找的东西,并且基于已接受的答案。
您可以使用 case 表达式:
请注意,这
||
是用于字符串连接的 sql 标准运算符。除非正确配置 MySQL 将||
视为logical OR
. 此行为由设置决定PIPES_AS_CONCAT
。您还可以使用启用此设置和其他合理的设置ANSI
。你可以看到你有什么设置:可以使用以下方式更改:
或者通过修改配置文件
然而,这纯粹是演示,所以我认为您应该在应用程序中对结果进行格式化。
以这种方式声明:
将用前导零填充
number
至少 5 位数字。这是 的唯一用途(5)
。例子:
显示显示零:
表明一个太大的值是“正确的”: