T-SQL:将固定长度带前导零的CHAR转INT时保留前导零的方法
解决带前导零的CHAR转INT后保留格式的问题
嗨,这里得先给你划个重点:INT类型本身是不存储前导零的——它只记录数值本身,所以不管你转之前是'00010'还是'10',转成INT后本质都是数值10,前导零会被自动丢弃,这是数据类型的特性决定的。
不过既然你输入数据长度始终是5位,想要得到显示为'00010'的结果,其实不用硬转成INT再折腾,而是可以转成数值后再格式化回固定长度的字符串,或者直接处理字符串。下面给你几个主流数据库的可行方案:
SQL Server:
可以用FORMAT函数直接指定格式,或者用RIGHT补零:-- 方法1:FORMAT函数 SELECT FORMAT(CAST('00010' AS INT), 'D5'); -- 方法2:RIGHT补零 SELECT RIGHT('00000' + CAST('00010' AS INT), 5);MySQL:
用LPAD函数补前导零到指定长度:SELECT LPAD(CAST('00010' AS UNSIGNED), 5, '0');PostgreSQL:
可以用TO_CHAR格式化,或者LPAD补零:-- 方法1:TO_CHAR格式化 SELECT TO_CHAR(CAST('00010' AS INTEGER), 'FM00000'); -- 方法2:LPAD补零 SELECT LPAD(CAST('00010' AS INTEGER)::TEXT, 5, '0');
如果你的需求是存储带前导零的数值,那建议继续使用CHAR/VARCHAR类型,因为INT类型从设计上就不支持保留前导零的存储。
内容的提问来源于stack exchange,提问作者Sylwia Mielnicka
相关产品推荐
相关产品推荐

