SQLite 如何在字符串中间插入一个字符

How can I insert a character in the middle of a string in SQLite

我的数据库中有一列,其中包含一些格式如下的数字:

15020
13000
5000
7070
125355
1850000

我需要更新列值,在最后两位数字前插入一个“,”。我希望结果是这样的:

150,20
130,00
50,00
70,70
1253,55
18500,00

我试过这个:

UPDATE table
SET [column] = replace([column],substr([column],-2),','||substr([column],-2));

但它没有像我预期的那样工作,这就是我在 return:

中得到的结果
150,20
13,000
5,000
,70,70
1253,55
185,0000

如有任何帮助,我们将不胜感激。谢谢

一种方法将使用 printf():

select printf('%d,%02d', cast(col / 100 int), col % 100)

Here 是一个 db<>fiddle.

在更新中,这将是:

update t
    set column = select printf('%d,%02d', cast(column / 100 int), column % 100);

使用函数SUBSTR().

您可以通过以下方式获取最后 2 个字符之前的字符串部分:

SUBSTR([column], 1, LENGTH([column]) -2)

最后 2 个字符为:

SUBSTR([column], -2)

所以更新语句应该是:

UPDATE tablename
SET [column] = SUBSTR([column], 1, LENGTH([column]) -2) || 
               ',' || 
               SUBSTR([column], -2);

如果您的值包含 1 位或 2 位数字,并且您希望在 , 之前使用前导 0,则:

UPDATE tablename
SET [column] = CASE WHEN LENGTH([column]) <= 2 THEN '0' ELSE '' END ||
               SUBSTR([column], 1, LENGTH([column]) -2) || 
               ',' || 
               SUBSTR([column], -2); 

参见demo

获取最后 2 个字符之前的字符串部分的另一种方法是通过整数除法隐式转换为整数:

UPDATE tablename
SET [column] = ([column] / 100) || ',' || SUBSTR([column], -2);

参见demo