1 需求
整数格式化为字符串时,不足的位数需要左补零
select format('%s°%s′%s″',
to_char(98,'000'), --度.规范要求3位,不足左补0
to_char(55,'00'), --分.规范要求2位,不足左补0
to_char(12,'00') --秒.规范要求2位,不足左补0
);
/*
输出,默认格式化前都会有个空格
098° 55′ 12″
*/
2 第一反应实现
对于左补零来说,大家第一个想到的就是lpad函数
select format('%s°%s′%s″',
lpad(98::text,3,'0'), --度
lpad(55::text,2,'0'), --分
lpad(12::text,2,'0') --秒
);
或者
select format('%s°%s′%s″',
trim(to_char(98,'000')), --度
trim(to_char(55,'00')), --分
trim(to_char(12,'00')) --秒
);
上面的代码简单粗暴实现了需求,但是效率比较差,因为显示或隐式调用了太多的函数.
3 最终解决方案
format一次性处理
select format('%s°%s′%s″',
to_char(98,'FM000'), --度
to_char(55,'FM00'), --分
to_char(12,'FM00') --秒
);
4 to_char注意事项
注意to_char的第二个参数使用技巧,第二个参数分为两个部分:
- 模板模式
- 模板模式修饰语
平时我们可能只注意查看模板模式 ,忽略了模板模式修饰语.
如果结果不符合预期的话,不防看一下模板模式修饰语