Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改SQL中的所有行和中间的一些数据_Sql - Fatal编程技术网

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

修改SQL中的所有行和中间的一些数据,sql,Sql,我有一个问题,我必须更改列中所有现有的13位值,使其成为15位。例如: 0101001000612 这是我已经存在的数据,我想在612之前再添加两个0并使其: 010100100000612 我在某个地方找到了下面的查询,但它将数据附加在末尾,而不是最后三个字符之前: update loc_state_journal set state_journal_id = state_journal_id + '00' 试试这个: 如果列类型为VARCHAR,则: UPDATE loc_stat

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

0101001000612
这是我已经存在的数据,我想在612之前再添加两个0并使其:

010100100000612
我在某个地方找到了下面的查询,但它将数据附加在末尾,而不是最后三个字符之前:

update loc_state_journal 
set state_journal_id = state_journal_id + '00' 

试试这个:

如果列类型为
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)

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

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

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

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

如果
state\u journal\u id
是数据的文本类型(
CHAR,VARCHAR
等),那么您需要使用
子字符串
函数(如果是Oracle,则为等效函数)将当前数据剪切为前10个字符和后3个字符,并在中间添加两个
00

例:

如果state\u journal\u id是数字类型(
integer、float
等),则可以使用数学函数来实现所需的结果

下面的例子是针对Oracle的。您也可以在其他数据库中使用适当的MOD函数

UPDATE loc_state_journal 
SET state_journal_id = (state_journal_id - MOD(state_journal_id,1000))*100 + MOD(state_journal_id,1000)

您使用的是哪种数据库管理系统?(有些产品有自己的字符串处理函数,而不是ANSI SQL。)列数据类型?是否先要现有的10个字符,然后是00,最后是3个字符?为什么不将其存储为
int
并将其转换为(格式化)无论您需要在哪里显示字符串?所有现有数据是否默认为13位,或者可能会更改…?@puneetarora
loc\u state\u journal
的数据类型是什么?非常优雅的解决方案
UPDATE loc_state_journal 
SET state_journal_id = (state_journal_id - MOD(state_journal_id,1000))*100 + MOD(state_journal_id,1000)