SQL 日期时间拆分问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 日期时间拆分问题相关的知识,希望对你有一定的参考价值。

我的数据库有这样的数据
seq begindate begintime enddate endtime
1 2014-8-1 16:9 2014-8-1 18:11

得到:
seq date begintime endtime
1 2014-8-1 16:9 2014-8-1 16:59
1 2014-8-1 17:0 2014-8-1 17:59
1 2014-8-1 18:0 2014-8-1 18:11

参考技术A --代码如下:;with DT_Table as (select top (datediff(dd,'2010-1-1','2020-1-1')) dateadd(dd,(row_number() over(order by a.object_id))-1,'2010-1-1') Date_Time from sys.columns a,sys.columns b,sys.columns c)select b.seq ,convert(varchar(10),a.Date_Time,120) as [date] ,case when convert(varchar(10),a.Date_Time,120)=convert(varchar(10),cast(b.begindate as datetime),120) then b.begintime else '00:01' end as begintime ,case when convert(varchar(10),a.Date_Time,120)=convert(varchar(10),cast(b.enddate as datetime),120) then b.endtime else '23:59' end as endtimefrom DT_Table a inner join ( select 1 seq,'2014-8-1' begindate,'10:00' begintime,'2014-8-3' enddate,'12:00' endtime union all select 2 ,'2014-8-2','9:00','2014-8-3','15:00' ) b on cast(b.begindate as datetime)<=a.Date_Time and cast(b.enddate as datetime)>=a.Date_Timeorder by b.seq,a.Date_Time以上代码有局限性的:
1、日期时间段只能在2010-1-1到2020-1-1日之间
2、你的日期和时间必须是标准格式,我未做begindate、begintime、enddate、endtime列的格式检查,默认你都是正确的日期或时间格式
3、以上脚本只支持SQL2005或以上版本,若是需要SQL2000版本的,可联系我

下面是执行结果:

希望能解决您的问题。
参考技术B 转成字符串
to_char(var_time, 'yyyymmdd:hh24miss')
然后再截取。

sql拆分列 时间拆分 日月年

 

 

技术图片

 

我想 查看今日访问人数 需要分组查询 就得 时间拆分

这两天百度 方法有很多 substring 。。。

但是 我这一列 是时间类型: 可以直接用 DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等

 

技术图片

 

 

 

到时候保存为视图  可以分组统计  计算访问量了

以上是关于SQL 日期时间拆分问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL挑战!有效日期拆分

SQL ORACLE 从多个日期时间行中获取周数

将日期时间列拆分为日期和时间变量

将日期时间列拆分为单独的日期和时间列

日期时间拆分

Impala:根据日期和时间将单行拆分为多行