我有一张如下表格:
code ---> INTEGER
name ---> CHAR
+------+------+
| code | name |
+------+------+
| 1 | aa |
| 2 | bb |
| 3 | cc |
我想以这种方式用代码字段左边的零填充:
SELECT LPAD(code,5,'0') FROM table;
此查询在MySQL中运行良好,但它不适用于SQL Server和PostgreSQL,我正在寻找适用于所有数据库或至少在这四种数据库上的查询:
没有任何变化。有解决方案吗?
答案 0 :(得分:8)
正确答案是“在您的客户中做到这一点” RDBMS级别没有单一的解决方案
但是,对于SQL Server 2012 (是的,下一个版本),PostgreSQL和MySQL,您可以这样做:
RIGHT(CONCAT('00000', code), 5)
答案 1 :(得分:1)
有点弱,但有一种选择是在前面添加一些零,然后从右边取最后的x个字符。
例如,
select '0000000000' || code from table;
will produce
00000000001
00000000002
00000000003
然后子串结果会给你
select substr('0000000000' || code, -5) from table;
00001
00002
00003
我不记得这四个数据库中的连接和子串函数是否相同。但我猜想也许你正在寻找一种方法来做到比你已经做的更通用,并且可能就是这样。虽然为整体丑陋道歉。
答案 2 :(得分:0)
在Firebird 2.5中,您可以使用如下查询:
select right('00000' || cast(code as varchar(20)), 5) from table