使表abc中的sktime字段,时间都减2小时如何操作,见图:

qq_29845565 2015-08-10 04:08:00
使表abc中的sktime字段,时间都减2小时,sktime 为char(5) 类型,应该如何写SQL语句,主要问题是:sktime为00:33的减2小时,如果变成22:33 呢,谢谢!!
...全文
112 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qq_29845565 2015-08-11
上次的答案见图,小时数向上加可以,但小时数往下减就不对了,这次的答案都可以,多谢了,
回复
qq_29845565 2015-08-11
再问一下:你上面写的 INSERT INTO ABC SELECT '012306',10,'17:17','00' UNION ALL SELECT '012306',10,'00:33','00' UNION ALL SELECT '012306',10,'17:07','00' UNION ALL SELECT '012306',10,'07:12','00' 是什么意思呀,我不太懂,我一般写成 insert into abc values ('012306','05','17:17'),看你们都像你那样写,能告诉我一下是什么意思吗?请说的详细些,谢了。
回复
qq_29845565 2015-08-11
引用 9 楼 yangb0803 的回复:
[quote=引用 8 楼 Tiger_Zhao 的回复:] 使表abc中的sktime字段,时间都加2小时如何操作,见图 同一个账号,一模一样的提问。 不会这么健忘吧?
额, 你记性真好, 看了下, 貌似都还没结贴...[/quote] 对上次是加2小时,这次问的是减2小时。00:33加知道怎么操作了,可以减2小时如何为22:33不知道,现在知道了,多谢以上各位。
回复
道玄希言 2015-08-10
引用 8 楼 Tiger_Zhao 的回复:
使表abc中的sktime字段,时间都加2小时如何操作,见图 同一个账号,一模一样的提问。 不会这么健忘吧?
额, 你记性真好, 看了下, 貌似都还没结贴...
回复
Tiger_Zhao 2015-08-10
使表abc中的sktime字段,时间都加2小时如何操作,见图
同一个账号,一模一样的提问。
不会这么健忘吧?
回复
qq_29845565 2015-08-10
引用 6 楼 Cherise_huang 的回复:
从左边截取五个字符就好了

 update abc
 set sktime = left(convert(char(5), dateadd(hour, -2, convert(time, sktime, 120))),5)
这个对了,谢谢!! 再问一下:你上面写的 INSERT INTO ABC SELECT '012306',10,'17:17','00' UNION ALL SELECT '012306',10,'00:33','00' UNION ALL SELECT '012306',10,'17:07','00' UNION ALL SELECT '012306',10,'07:12','00' 是什么意思呀,我不太懂,我一般写成 insert into abc values ('012306','05','17:17'),看你们都像你那样写,能告诉我一下是什么意思吗?请说的详细些,谢了。
回复
Cherise_huang 2015-08-10
从左边截取五个字符就好了

 update abc
 set sktime = left(convert(char(5), dateadd(hour, -2, convert(time, sktime, 120))),5)
回复
qq_29845565 2015-08-10
引用 3 楼 Cherise_huang 的回复:

CREATE TABLE ABC
(
[card] VARCHAR(20),
rq INT ,
sktime CHAR(5),
[no] VARCHAR(20)
)

INSERT INTO ABC
SELECT '012306',10,'17:17','00' UNION ALL
SELECT '012306',10,'00:33','00' UNION ALL
SELECT '012306',10,'17:07','00' UNION ALL
SELECT '012306',10,'07:12','00'

ALTER TABLE ABC ALTER COLUMN sktime DATETIME

UPDATE ABC SET sktime=convert(char(5),RIGHT(DATEADD(HOUR,-2,sktime),LEN(sktime)-10),8)


提示这个见图:
回复
qq_29845565 2015-08-10
引用 1 楼 yangb0803 的回复:

-- 查询语句
select sktime,
dateadd(hour, -2, convert(time, sktime, 120)) from abc

-- 更新语句
update abc
set sktime = convert(char(5), dateadd(hour, -2, convert(time, sktime, 120)))



sktime的类型是定义好的,只能是char(5),执行后是这样(见图),怎么能让执行完只是类似于 22:33没有后面多余的内容呢?
回复
Cherise_huang 2015-08-10

CREATE  TABLE ABC
(
 [card] VARCHAR(20),
 rq    INT ,
 sktime CHAR(5),
 [no]  VARCHAR(20) 	
)

INSERT INTO ABC
SELECT '012306',10,'17:17','00' UNION ALL 
SELECT '012306',10,'00:33','00' UNION ALL 
SELECT '012306',10,'17:07','00' UNION ALL 
SELECT '012306',10,'07:12','00' 

ALTER TABLE ABC ALTER COLUMN sktime DATETIME

UPDATE ABC SET sktime=convert(char(5),RIGHT(DATEADD(HOUR,-2,sktime),LEN(sktime)-10),8)
回复
道玄希言 2015-08-10
sktime 建议使用 time 类型字段,不建议用char 类型。
回复
道玄希言 2015-08-10

 -- 查询语句
 select sktime,
 dateadd(hour, -2, convert(time, sktime, 120)) from abc

 -- 更新语句
 update abc
 set sktime = convert(char(5), dateadd(hour, -2, convert(time, sktime, 120)))

回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-08-10 04:08
社区公告
暂无公告