postgresql - postgres 12中带有前导零的隐蔽数字字符串到带有前导零的数值
问题描述
我是 PostgreSQL 的新手。我想将字符串 '0480' 转换为数字 0480。我正在使用强制转换运算符来执行此操作,
db=# select '0480':: numeric;
numeric
---------
480
(1 row)
但在这里我期待 0480 号码。然后我尝试了 PostgreSQL 中的 to_number 函数,
db=# select to_number('0480','9999');
to_number
-----------
480
(1 row)
那么这怎么可能呢?如何将带有前导零的数字字符串转换为带有前导零的数值。
还有一些 to_char 函数的输出,有点混乱?
db=# select to_char(0480,'9999');
to_char
---------
480
(1 row)
db=# select to_char(0480,'09999');
to_char
---------
00480
(1 row)
在 Debian 上使用 PostgreSQL 12.3
解决方案
数字没有前导零。0480
是完全相同的数字480
- 就像00000001
是完全相同的数字1
获得前导零的唯一方法是将数字转换为字符串并添加所需数量的前导零。
to_char 函数的一些输出,有点混乱?
不,一点也不。
to_char(0480,'9999')
将数字转换480
为 4 个字符的字符串。9
表示如果该数字没有值,则可以“删除”它。
9位位置(如果无关紧要可以丢弃)
0位位置(即使无关紧要也不会丢弃)
前导零总是无关紧要的(从数学角度来看)。
to_char(480,'0000')
会如你所愿:一个前导零的四位数字符串。
同样to_char(1,'0000')
会返回0001
。
请注意,默认情况下, 的所有输出都to_char()
与前导空格右对齐。如果你不想这样,你应该使用FM
修饰符:例如to_char(1,'FM0000')
推荐阅读
- java - Optional 的什么等价于 Optional.empty()?或者,一个更好的方式来写这个
- sql-server - 如何在没有 MSDTC 的情况下回滚事务 SSIS?
- selenium-webdriver - 线程“主”org.openqa.selenium.WebDriverException 中的异常:java.net.ConnectException:无法连接到 localhost
- anaconda - 源conda环境导出QHOME,无法执行q命令
- javascript - 图片元素不适用于 onmouseover 和 onmouseout
- php - 如何在 laravel 中为您的应用程序错误创建跟踪
- c# - GroupBy 和 Pagination 不能一起工作 CosmosDB
- r - R - grep() 匹配,但 str_remove_all() 因非 ascii 字符而失败
- python - 根据python中的另一个字符串从列表中提取字符串
- angular-material - matSort 标题根本没有排序表