用于格式化前导零的数字的SQLite函数?

我有一个需要包含产品的SQLite数据库。这些产品具有固定格式的复合产品编号,包括类别,组和产品编号(cccccc.gg.ppp)。每次插入新产品时,都应使用类别和组编号构建新产品编号,然后使用该编号增加1中的最高产品编号。 为此,我考虑将所有三个数字存储在单独的字段中,并使用视图动态组合产品编号。为了实现这一点,我需要添加前导零,因为产品编号的格式是固定的。 但是,我似乎无法找到一个内置的SQLite函数,它可以让我这样做...... :-( 我宁愿不写自定义函数,因为我们可能不得不与其他开发人员共享数据库,以便他们从中读取数据;我不知道他们将使用什么平台或语言。 可以这样做吗?或者我们必须找到不同的解决方案吗?     
已邀请:
这可以通过使用字符串连接和
substr
函数进行一些魔术来实现。长话短说,这就是你想要的:
select substr('0000000000'||'1234', -10, 10)
解释如下。 首先,要知道SQLite的字符串连接运算符是
||
。 我们将从一个与我们想要返回的值一样长的字符串开始。例如,如果你想返回一个总是10个字符长的数字,并且如果它更短,则用
0
s填充它,然后从10
0
s的字符串开始。为此,我们将连接您想要返回的数字。在我们的例子中,那是'1234'。到目前为止,我们的部分看起来像这样:
'0000000000'||'1234'
然后,将整个事物传递给
substr
函数。根据文档,这里是
substr
函数的工作原理: substr(X,Y,Z)函数返回输入字符串X的子字符串,该字符串以第Y个字符开头,长度为Z个字符。 ...如果Y为负数,则通过从右侧而不是左侧计数来找到子串的第一个字符。 因此,如果您希望字符串长度为10个字符,则将-10作为Y参数传递(从右侧开始计数,返回10个字符)并将10作为Z参数传递(总计10个字符)。     
select substr('0000000000'||'1234', length('0000000000'||'1234')-9, 10)
作品;用产品编号替换
'1234'
,任何长度< = 10。     
我知道这是一个老问题,但以下更简单:
--  zero-pad to 4 digits:
select substr('0000'||3,-4);
如果你选择到最后,
substr
不需要长度。     
从3.8.3(2014)开始您可以使用printf作为:
SELECT printf("%04d", product_number) AS product_number FROM table;
将4更改为您需要的数字。这将为product_number 1返回0001。     

要回复问题请先登录注册