修改sql中的所有行和中间的一些数据

时间:2016-12-16 08:19:17

标签: sql

我有问题,我必须更改列中所有现有的13位数值,使其为15位数。例如:

0101001000612

这是我已经存在的数据,我想在612之前再添加两个0并进行制作:

010100100000612

我在某个地方找到了以下查询,但是它在最后添加数据而不是在最后三个字符之前:

update loc_state_journal 
set state_journal_id = state_journal_id + '00' 

4 个答案:

答案 0 :(得分:0)

试试这个:

如果列类型为VARCHAR,则:

UPDATE loc_state_journal 
SET state_journal_id =  STUFF(state_journal_id,LEN(state_journal_id )-2,0,'00')

如果您的列为BIGINT,那么:

 UPDATE loc_state_journal 
    SET state_journal_id = cast(stuff(cast(state_journal_id as varchar(15)),LEN(CAST(state_journal_id as VARCHAR(15)))-2,0,'00') as bigint)

答案 1 :(得分:0)

根据您的问题和您的尝试,您可以获得相同形式和长度的所有数据。如果是这样,并使用SQL Server,那么你可以使用STUFF实现如下:

UPDATE loc_state_journal 
SET state_journal_id = STUFF(state_journal_id,10,0,'00')

答案 2 :(得分:0)

在下面的计算中,我已经包含了如何找到查询的第一部分和最后部分,这些计算在结果中使用;

DECLARE @MyVariable varchar(20) = '010100100000612'

SELECT
@MyVariable MyVariable
,SUBSTRING(@MyVariable,1,LEN(@MyVariable)-3) FirstPart
,SUBSTRING(@MyVariable,LEN(@MyVariable)-2,3) FinalPart
,SUBSTRING(@MyVariable,1,LEN(@MyVariable)-3) + '00' + SUBSTRING(@MyVariable,LEN(@MyVariable)-2,3) Result

输出

MyVariable      FirstPart       FinalPart   Result
010100100000612 010100100000    612         01010010000000612

答案 3 :(得分:0)

如果<li> 是文本类型的数据(state_journal_id等),则需要使用CHAR, VARCHAR函数(如果是Oracle,否则等效函数)将当前数据剪切为第一个10个字符和最后3个字符,并在其间附加两个substring

例如:

00

如果state_journal_id是数字类型(UPDATE loc_state_journal SET state_journal_id = SUBSTR(state_journal_id,0,9) ||'00'||SUBSTR(state_journal_id,10,3) 等),那么您可以使用数学函数来实现所需的结果。

以下示例适用于Oracle。你也可以在其他数据库中使用适合MOD的功能。

integer, float