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