请教SQL批量修改数据库语句

时间:2021-01-06 07:25:49
批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用

17 个解决方案

#1


declare @v varchar(50)

set @v = '2013-11-25 15:41:14:335'

select left(@v,19)+'.'+right(@v,3)
/*
2013-11-25 15:41:14.335
*/

#2


DECLARE @a DATETIME
SET @a='2013-11-25 15:41:14:335'
SELECT REPLACE(SUBSTRING(REVERSE(@a),PATINDEX('%:%',REVERSE(@a))-1,1),':','.')
SELECT @a

/*
-----------------------
2013-11-25 15:41:14.337
*/

#3



select stuff('2013-11-25 15:41:14:335',20,1,',')


------------------------
2013-11-25 15:41:14,335

(1 行受影响)

update a set 字段=stuff(字段,20,1,',') from 表 a


#4


UPDATE 表 set 字段=convert(datetime,stuff(convert(varchar(50),字段,121),20,1,'.'))

#5


我支持1楼,代码简洁。

#6


引用 楼主 yaoxiaosi 的回复:
批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”

#7


引用 6 楼 yaoxiaosi 的回复:
Quote: 引用 楼主 yaoxiaosi 的回复:

批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”
2楼我的代码不需要这种判断

#8


思路是:获取最后一个:然后替换

#9


引用 6 楼 yaoxiaosi 的回复:
Quote: 引用 楼主 yaoxiaosi 的回复:

批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”


这样吗:

declare @v varchar(50)
 
set @v = '2013-11-25 15:41:14:335'
 
select reverse(stuff(REVERSE(@v),charindex(':',REVERSE(@v)),1,'.'))
/*
2013-11-25 15:41:14.335
*/

#10


学习了  引用下

#11


引用 9 楼 yupeigu 的回复:
Quote: 引用 6 楼 yaoxiaosi 的回复:

Quote: 引用 楼主 yaoxiaosi 的回复:

批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”


这样吗:

declare @v varchar(50)
 
set @v = '2013-11-25 15:41:14:335'
 
select reverse(stuff(REVERSE(@v),charindex(':',REVERSE(@v)),1,'.'))
/*
2013-11-25 15:41:14.335
*/



是这个意思!!!再问一下,要批量次改怎么写?我要修改的字段是“CreateTime”

#12


引用 11 楼 yaoxiaosi 的回复:
Quote: 引用 9 楼 yupeigu 的回复:

Quote: 引用 6 楼 yaoxiaosi 的回复:

Quote: 引用 楼主 yaoxiaosi 的回复:

批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”


这样吗:

declare @v varchar(50)
 
set @v = '2013-11-25 15:41:14:335'
 
select reverse(stuff(REVERSE(@v),charindex(':',REVERSE(@v)),1,'.'))
/*
2013-11-25 15:41:14.335
*/



是这个意思!!!再问一下,要批量次改怎么写?我要修改的字段是“CreateTime”


可以这样试试:



update 表
set CreateTime = reverse(stuff(REVERSE(CreateTime),charindex(':',REVERSE(CreateTime)),1,'.'))

#13



update tb
set createtime=REPLACE(SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime))-1,1),':','.')

#14


请教SQL批量修改数据库语句为何无视我

#15


引用 13 楼 DBA_Huangzj 的回复:
update tb
set createtime=REPLACE(SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime))-1,1),':','.')


哥哥~~这个返回的是
2、4、3、3、........等一些列阿拉伯数字~~~~

#16


引用 15 楼 yaoxiaosi 的回复:
Quote: 引用 13 楼 DBA_Huangzj 的回复:


update tb
set createtime=REPLACE(SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime))-1,1),':','.')


哥哥~~这个返回的是
2、4、3、3、........等一些列阿拉伯数字~~~~


对了,这个CreateTime是什么数据类型,datetime型,还是varchar型的

#17



CREATE TABLE #t (createtime VARCHAR(40))
INSERT INTO #t
        ( createtime )
VALUES  ( '2013-11-25 15:41:14:335'  -- createtime - datetime
          )
SELECT *--,REVERSE(REPLACE(REVERSE(createtime),SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime)),1),'.') )
 FROM #t
go
update #t
set createtime=REVERSE(REPLACE(REVERSE(createtime),SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime)),1),'.') )
SELECT * FROM #t

DROP TABLE #T

/*
createtime
----------------------------------------
2013-11-25 15:41:14:335

(1 row(s) affected)


(1 row(s) affected)
createtime
----------------------------------------
2013-11-25 15.41.14.335
*/

#1


declare @v varchar(50)

set @v = '2013-11-25 15:41:14:335'

select left(@v,19)+'.'+right(@v,3)
/*
2013-11-25 15:41:14.335
*/

#2


DECLARE @a DATETIME
SET @a='2013-11-25 15:41:14:335'
SELECT REPLACE(SUBSTRING(REVERSE(@a),PATINDEX('%:%',REVERSE(@a))-1,1),':','.')
SELECT @a

/*
-----------------------
2013-11-25 15:41:14.337
*/

#3



select stuff('2013-11-25 15:41:14:335',20,1,',')


------------------------
2013-11-25 15:41:14,335

(1 行受影响)

update a set 字段=stuff(字段,20,1,',') from 表 a


#4


UPDATE 表 set 字段=convert(datetime,stuff(convert(varchar(50),字段,121),20,1,'.'))

#5


我支持1楼,代码简洁。

#6


引用 楼主 yaoxiaosi 的回复:
批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”

#7


引用 6 楼 yaoxiaosi 的回复:
Quote: 引用 楼主 yaoxiaosi 的回复:

批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”
2楼我的代码不需要这种判断

#8


思路是:获取最后一个:然后替换

#9


引用 6 楼 yaoxiaosi 的回复:
Quote: 引用 楼主 yaoxiaosi 的回复:

批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”


这样吗:

declare @v varchar(50)
 
set @v = '2013-11-25 15:41:14:335'
 
select reverse(stuff(REVERSE(@v),charindex(':',REVERSE(@v)),1,'.'))
/*
2013-11-25 15:41:14.335
*/

#10


学习了  引用下

#11


引用 9 楼 yupeigu 的回复:
Quote: 引用 6 楼 yaoxiaosi 的回复:

Quote: 引用 楼主 yaoxiaosi 的回复:

批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”


这样吗:

declare @v varchar(50)
 
set @v = '2013-11-25 15:41:14:335'
 
select reverse(stuff(REVERSE(@v),charindex(':',REVERSE(@v)),1,'.'))
/*
2013-11-25 15:41:14.335
*/



是这个意思!!!再问一下,要批量次改怎么写?我要修改的字段是“CreateTime”

#12


引用 11 楼 yaoxiaosi 的回复:
Quote: 引用 9 楼 yupeigu 的回复:

Quote: 引用 6 楼 yaoxiaosi 的回复:

Quote: 引用 楼主 yaoxiaosi 的回复:

批量修改数据库语句:
比如:“2013-11-25 15:41:14 :335”
把最后一个“:”改为“.”

不知道SQL语句怎么写?急用


可能我没说太清楚吧,这个“:”的位置并不固定,因为“:”后面不一定是3位,“:”前也不一定是19个字符,因为前面的日期的月份和日有可能是1位,如“2013-1-2”


这样吗:

declare @v varchar(50)
 
set @v = '2013-11-25 15:41:14:335'
 
select reverse(stuff(REVERSE(@v),charindex(':',REVERSE(@v)),1,'.'))
/*
2013-11-25 15:41:14.335
*/



是这个意思!!!再问一下,要批量次改怎么写?我要修改的字段是“CreateTime”


可以这样试试:



update 表
set CreateTime = reverse(stuff(REVERSE(CreateTime),charindex(':',REVERSE(CreateTime)),1,'.'))

#13



update tb
set createtime=REPLACE(SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime))-1,1),':','.')

#14


请教SQL批量修改数据库语句为何无视我

#15


引用 13 楼 DBA_Huangzj 的回复:
update tb
set createtime=REPLACE(SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime))-1,1),':','.')


哥哥~~这个返回的是
2、4、3、3、........等一些列阿拉伯数字~~~~

#16


引用 15 楼 yaoxiaosi 的回复:
Quote: 引用 13 楼 DBA_Huangzj 的回复:


update tb
set createtime=REPLACE(SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime))-1,1),':','.')


哥哥~~这个返回的是
2、4、3、3、........等一些列阿拉伯数字~~~~


对了,这个CreateTime是什么数据类型,datetime型,还是varchar型的

#17



CREATE TABLE #t (createtime VARCHAR(40))
INSERT INTO #t
        ( createtime )
VALUES  ( '2013-11-25 15:41:14:335'  -- createtime - datetime
          )
SELECT *--,REVERSE(REPLACE(REVERSE(createtime),SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime)),1),'.') )
 FROM #t
go
update #t
set createtime=REVERSE(REPLACE(REVERSE(createtime),SUBSTRING(REVERSE(createtime),PATINDEX('%:%',REVERSE(createtime)),1),'.') )
SELECT * FROM #t

DROP TABLE #T

/*
createtime
----------------------------------------
2013-11-25 15:41:14:335

(1 row(s) affected)


(1 row(s) affected)
createtime
----------------------------------------
2013-11-25 15.41.14.335
*/