以独立于数据库的方式使用零填充SQL(LPAD)

ale*_*oot 2 mysql sql sql-server postgresql firebird

我有一个如下表:

code ---> INTEGER
name ---> CHAR

+------+------+
| code | name |
+------+------+
|  1   |  aa  |
|  2   |  bb  |
|  3   |  cc  |
Run Code Online (Sandbox Code Playgroud)

我想以这种方式用左零填充代码字段:

SELECT LPAD(code,5,'0') FROM table;
Run Code Online (Sandbox Code Playgroud)

这个查询在MySQL中运行良好,但它不适用于SQL Server和PostgreSQL,我正在寻找一个适用于所有数据库的查询,或者至少在这四个数据库上运行:

  • MySQL的
  • PostgreSQL的
  • MSSQL
  • 火鸟

没有任何变化.有解决方案吗?

gbn*_*gbn 8

正确答案是"在您的客户端执行此操作".
RDBMS级别没有单一的解决方案

但是,对于SQL Server 2012(是的,下一个版本),PostgreSQL和MySQL,您可以这样做:

RIGHT(CONCAT('00000', code), 5)
Run Code Online (Sandbox Code Playgroud)
  • 较新的PostgreSQL确实有LPAD,而SQL Server则没有
  • 各种FORMAT函数不兼容(但需要等到SQL Server 2012)
  • RIGHT是一致的,但字符串连接运算符是不同的
  • 在SQL Server 2012中添加了CONCAT功能