怎么修改sql数据库中的时间

怎么修改sql数据库中的时间,第1张

方法和 *** 作步骤如下:

1.首先,打开数据库并创建一个新表。由于日期格式的原因,所以两个date_time和time_time字段是日期类型,见下图,然后进入下一步。

2.其次,完成以上步骤后,如果是一个简单的查询表,则会以日期格式显示,如下图所示,然后进行下一步。

3.然后,在完成上述步骤之后,将查询日期显示结果设置为日期格式,可以使用数据库函数to_char实现该格式。结果是一个字符串,如下图所示,然后是下一步。

4.然后,完成上述步骤后,在“查询编辑器”窗口中,输入如下所示的代码,然后进入下一步。

5.最后,在完成上述步骤之后,完成修改date类型字段值的 *** 作,如下图所示。这样,问题就解决了。

注意事项:

SQL是结构化查询语言的简称。SQL是一种功能完备的数据库语言,它是一组用于数据库的 *** 作命令。在使用它时,您只需要发出命令“做什么”,而“如何做”不是用户考虑的问题。

SQL数据库的数据体系结构基本上是三级结构,但是使用的术语不同于传统的关系模型术语。在SQL中,关系模式(schema)称为“基表”内部模式称为“存储文件”子模式(外部模式)称为“视图”元组称为行该属性称为列。

oracle为例吧:

1.分钟转成不同格式的时间

数据库里有个字段 存的分钟

① 现在想显示成HH:MM格式 假设为514分钟

SELECT to_char((to_date('00:00','HH24:MI')+514/24/60),'HH24:MI') from dual

输出结果:

08:34

②如果存的是秒 同理

SELECT to_char((to_date('00:00:00','HH24:MI:SS')+514/24/60/60),'HH24:MI:SS') from dual

输出结果:

00:08:34

至于显示成其他的格式,也就不成问题了

2.时分相加

至于为什么要写这个,是因为Oracle里没有两个时间相加的处理,两个to_date相减可以,相加就出错了:

数据库里有两个字段 存的都是HH:MM格式的时间

假设一个是本月上午缺勤时间合计: 08:30(8个半小时)

另外一个是本月下午缺勤时间合计: 00:30(半小时)

现在想要总缺勤时间,显示成 HH:MM格式

做法有两种

① 正常的逻辑运算(代码或者PLSQL实现的应该比这个容易的多,仅限于SQL实现):

select LPAD((substr('08:30',1,2) + substr('00:30',1,2)+(substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2))/60),2,'0') || ':' || LPAD(mod((substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2)),60),2,'0') from dual

看起来很复杂,而实际上就是把小时相加,分钟相加,之后把分钟满60的小时进位,取余的显示:

取前两位相加得小时:(是因为不确定数据储存的格式是不是严格的HH:MM,而不能借正则分隔“:”)

(substr('08:30',1,2) + substr('00:30',1,2)

取后两位相加得分钟:

(substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2))

把分钟满60的小时进位得显示用的小时: (substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2))/60

现在小时算完了,不足两位左补零:

LPAD((substr('08:30',1,2) + substr('00:30',1,2)+(substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2))/60),2,'0')

把分钟取余得显示用的分钟:

mod((substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2)),60)

现在分钟算完了,不足两位左补零: LPAD(mod((substr('08:30',length('08:30')-1,2)+substr('00:30',length('00:30')-1,2)),60),2,'0')

最后连上“:”就变成上述的SQL,得到的时间用HH:MM显示了

输出结果:

09:00

②函数实现:

SELECT to_char(to_date('00:00','HH24:MI') +(((to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))) *24*60 + (to_date('00:30','HH24:MI') - trunc(to_date('00:30','HH24:MI'))) *24*60)/24/60),'HH24:MI') from dual

同样看起来很复杂

首先把HH:MM的换成数值:

to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))

输出结果:.354166666666666666666666666666666666666(其实是代表了一个时间,是以天为单位的)

现在*24*60 把数值换成分钟:

(to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))) *24*60

输出结果:510

也就是把08:30 变成了510分

(to_date('00:30','HH24:MI') - trunc(to_date('00:30','HH24:MI'))) *24*60

输出结果:30(时间是.020833333333333333333333333333333333333)这两个

也就是把00:30 变成了30分

然后把两个分钟相加:

((to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))) *24*60 + (to_date('00:30','HH24:MI') - trunc(to_date('00:30','HH24:MI'))) *24*60)

输出结果:540

剩下的就是显示处理了,和1里面的做法一致:

to_char(to_date('00:00','HH24:MI') +(((to_date('08:30','HH24:MI') - trunc(to_date('08:30','HH24:MI'))) *24*60 + (to_date('00:30','HH24:MI') - trunc(to_date('00:30','HH24:MI'))) *24*60)/24/60),'HH24:MI')

输出结果:

3. 不论是方法①还是方法②,这里都存在一个问题:如果时间相加之后超出23:59,系统就会报错,目前我用的涉及不到这个 就没写出来,如果有用到的直接再转成DD:HH:MM的格式就行了,也就是把小时数满24的进位取显示用的天

SELECT to_char(to_date('01 00:00','DD HH24:MI') +(((to_date('23:30','HH24:MI') - trunc(to_date('23:30','HH24:MI'))) *24*60 + (to_date('01:30','HH24:MI') - trunc(to_date('01:30','HH24:MI'))) *24*60)/24/60-1),'DD HH24:MI') from dual

输出结果:01 01:00(25小时)

oracle 时间相减

select to_char((TO_DATE('1970-01-01', 'yyyy-MM-dd') +

(to_date('10:10:10', 'HH24:mi:ss') -

to_date('12:10:10', 'HH24:mi:ss'))), 'HH24:mi:ss')

from dual

对当前日期增加50分种

SQL>select sysdate, sysdate+numtodsinterval(50,’minute’) from dual

SYSDATE SYSDATE+NUMTODSINTE

——————- ——————-

2010-10-14 21:39:12 2010-10-14 22:29:12

对当前日期增加45秒

SQL>select sysdate, sysdate+numtodsinterval(45,’second’) from dual

SYSDATE SYSDATE+NUMTODSINTE

——————- ——————-

2010-10-14 21:40:06 2010-10-14 21:40:51

对当前日期增加3天

SQL>select sysdate, sysdate+3 from dual

SYSDATE SYSDATE+3

——————- ——————-

2010-10-14 21:40:46 2010-10-17 21:40:46

对当前日期增加4个月

SQL>select sysdate, add_months(sysdate,4) from dual

SYSDATE ADD_MONTHS(SYSDATE,

——————- ——————-

2010-10-14 21:41:43 2011-02-14 21:41:43

对当前日期增加一个小时:

SQL>select sysdate, sysdate+numtodsinterval(1,’hour’) from dual

SYSDATE SYSDATE+NUMTODSINTE

——————- ——————-

2010-10-14 21:38:19 2010-10-14 22:38:19

对当前日期增加50分种


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6912948.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-30
下一篇2023-03-30

发表评论

登录后才能评论

评论列表(0条)

    保存