--1. 当前系统日期、时间 select getdate() --2015-01-06 09:27:27.277 --2.时间操作 dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值dateadd(datepart,number,date)注: datepart : year(yy, yyyy) | quarter(qq,q) | month(mm,m) | week(ww,wk) | day(dd,dy) | hour(h) | minute(mi,n) | second (ss,s)| millisecond(ms) date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。例: select getdate() select dateadd(year,1,getdate()) --2016-01-06 09:27:27.277 select dateadd(month,1,getdate()) --2017-02-06 09:27:27.277 select dateadd(day,1,getdate()) --2015-01-07 09:27:27.277 select dateadd(week,1,getdate()) --2015-01-13 09:27:27.277 select dateadd(weekday,1,getdate()) --2015-01-07 09:27:27.277 select dateadd(hour,1,getdate()) --2015-01-06 10:27:27.277 select dateadd(Minute,1,getdate()) --2015-01-06 09:28:27.277 select dateadd(Second,1,getdate()) --2015-01-06 09:28:28.277 --3. datediff 返回跨两个指定日期的日期和时间边界数。datediff( date-part, startdate, enddate )注: datepart : year(yy, yyyy) | quarter(qq,q) | month(mm,m) | week(ww,wk) | day(dd,dy) | hour(h) | minute(mi,n) | second (ss,s)| millisecond(ms) startdate 和 enddate 参数是合法的日期表达式。返回值:(enddate)-(startdate)例: select datediff(year,getdate(),dateadd(year,2,getdate())) --返回:2 SELECT * FROM crm_contract where datediff(month,Subtime,getdate())=0 --查看crm_contract申请时间subtime是本月的数据 --4. datepart 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。--如果需要得到自己需要的日期,则需要讲日期时间格式化SELECT DATEPART(year, getdate()) as ‘年份‘ SELECT DATEPART(month, getdate()) as ‘月份‘SELECT DATEPART(day, getdate()) as ‘日期‘SELECT DATEPART(week, getdate()) as ‘本年第几周数‘SELECT (DATEPART(weekday, getdate())-1) as ‘今天是周几?‘ SELECT DATEPART(hour, getdate()) as ‘小时‘SELECT DATEPART(Minute, getdate()) as ‘分钟‘ SELECT DATEPART(Second, getdate()) as ‘秒时‘ --5. datename 返回代表指定日期的指定日期部分的字符串SELECT datename(weekday, getdate()) as ‘今天是星期几?‘SELECT datename(month,convert(varchar(10), getdate(),126)) as ‘今天是几月份?‘SELECT datename(day,convert(varchar(10), getdate(),126)) as ‘今天是几号?‘SELECT datename(year,convert(varchar(10), getdate(),126)) as ‘今年是哪年?‘ --上周周一SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()),-7)--上周周天SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()),-1)--.本周周一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()),0) --.本周周天 select dateadd(wk,datediff(wk,0,getdate()),6)--下周周一select dateadd(wk,datediff(wk,0,getdate()),7)--下周周天select dateadd(wk,datediff(wk,0,getdate()),13)--1.本月第一天 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --.本月最后一天 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) --.本周星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) --.本周星期天 select dateadd(wk,datediff(wk,0,getdate()),6) --.本年第一天 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) --.本年最后一天 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) --.本季度第一天 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) --.当天的半夜 SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) --.上个月的最后一天 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) --.去年的最后一天 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) --.本月的第一个星期一 select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
Sqlserver时间函数用法(二)
标签:等等 日期时间 自己 一段 art ber lis from 未来
小编还为您整理了以下内容,可能对您也有帮助:
SQL Server中的时间函数有那些,最好举例说明?
SQL数据库中有各种不同的函数,下面为您介绍SQL中的时间函数,如果您是才接触SQL的新手,不妨一看,相信会对您有所帮助。
--基于时间SQL函数--
getdate()
--返回当前系统日期和时间。
select
getdate()
DateAdd
--在向指定日期加上一段时间的基础上,返回新的
datetime
值。
DATEADD
(
datepart
,
number,
date
)
--例:向当天的时间增加5天
select
dateadd(dd,5,getdate())
datediff
--返回跨两个指定日期的日期和时间边界数。
DATEDIFF
(
datepart
,
startdate
,
enddate
)
--例:返回2005-01-01与当天有多少天
select
datediff(dd,'2005-01-01',getdate())
--把时间字段的数据变为年月
Select
Convert(Varchar(6),GetDate(),112)
--字符串变时间
select
convert(datetime,left(@t,len(@t)-4)+':'+left(right(@t,4),2)+':'+right(@t,2))
ISDATE
--确定输入表达式是否为有效的日期
DATEPART
--返回代表指定日期的指定日期部分的整数
DATEPART
(
datepart
,
date
)
--如:返回当前是几月
select
datepart(mm,getdate())
DATENAME
--返回代表指定日期的指定日期部分的字符串
--datepart
,datename的区别:前者返回是整数,后者返回是字符串。
SQL Server中的时间函数有那些,最好举例说明?
SQL数据库中有各种不同的函数,下面为您介绍SQL中的时间函数,如果您是才接触SQL的新手,不妨一看,相信会对您有所帮助。
--基于时间SQL函数--
getdate()
--返回当前系统日期和时间。
select
getdate()
DateAdd
--在向指定日期加上一段时间的基础上,返回新的
datetime
值。
DATEADD
(
datepart
,
number,
date
)
--例:向当天的时间增加5天
select
dateadd(dd,5,getdate())
datediff
--返回跨两个指定日期的日期和时间边界数。
DATEDIFF
(
datepart
,
startdate
,
enddate
)
--例:返回2005-01-01与当天有多少天
select
datediff(dd,'2005-01-01',getdate())
--把时间字段的数据变为年月
Select
Convert(Varchar(6),GetDate(),112)
--字符串变时间
select
convert(datetime,left(@t,len(@t)-4)+':'+left(right(@t,4),2)+':'+right(@t,2))
ISDATE
--确定输入表达式是否为有效的日期
DATEPART
--返回代表指定日期的指定日期部分的整数
DATEPART
(
datepart
,
date
)
--如:返回当前是几月
select
datepart(mm,getdate())
DATENAME
--返回代表指定日期的指定日期部分的字符串
--datepart
,datename的区别:前者返回是整数,后者返回是字符串。
SQL SERVER查询时间是一年中第几周的函数
from a,b,c,d 也可以用另外用Join on 的方式,可以结构上简单粗暴,两种想增加任意多表级联都先往表区域里丢个表名,级联条件丢在where或join区域里即可,你细品,当然写Join 列表也不是什么难事。主“事实表”写一个,其他都Left join,维度表不一定比事实表小,没索引的基本可以在联接关系中忽略……如果看懂了自己总结一下,说多了你记不住,等于没说。
特别适合生成动态拼接的SQL语句,无穷扩展,我设计了两个界面,第一步产生宽表,除了“聚”,外列选择,列过滤,集合筛选都在第一步产生,表的级联是可以无穷递归在关系里嵌套深挖,但都简单罗列,把复杂变简单,这非常非常重要。可以生成Where或Join类型的SQL任选,用户无需自己写SQL,全程鼠标戳戳即可,当然输入条件还是得用键盘的,但原则上尽量用鼠标,回头弄好了我把截图发上来。
第二个界面就是聚合,和PowerBI界面上的操作一样。
可以搞定关系型数据库所有的常规报表,准不准客户知道,我都不用关心里边具体的逻辑,他们自己就知道调整,我只是负责创造这种调整的可能性。
这样用户就可以每天做宽表,做聚合,做宽表,做聚合,吃饭睡觉打豆豆。。。。。
我还做了一个SQL语句的AST解析成XMl的工具,理论上可以批量自动阅读替换SQL,还没想好具体应用上怎么玩,但直觉上这东西加点智能,将来可以代替千军万马人类的劳动,SomeDay Maybe。
对付一个系统,上千个表,几百个SP,FN,View,最好先用工具扫描记录一下所有表结构,高频依赖对象,建立一个Relation表,这样就梳理出了核心级联关系,用机器和神经去做,别用脑细胞。比如什么收费退费都是有雷同模式的,举一反五。
早起用Pad戳的文字,这几天黑白颠倒,神魂颠倒,兴奋又无力,先对付看吧。
@nonesuccess 回应评论里的问题,写这里大家可能都有用:目前多数业务系统都是用字符串类型的字段做关联,这样恰好方便我们扫描关系,判断一列随机取样100个不同的,是否命中另外一个表的某字段,这样的语句你会写吧?好,这就是关键!~用程序根据行数,索引类型选出可能的事实表,和维度表,互相做个全部字段的探测。
假设数据库有100个表,每个10个可能发生联系的字符串类型字段,一秒探测一次的话,要做1000*1000次,百万级别的探测,把这些字段的关系,记录在一个Relation表里,当然,就算计算机玩命跑你也等不起百万秒那一天才8万多秒,你不可能等上10天,这种探测也是有办法缩小规模的。那就需要一些经验技巧,如果系统是别人开发的,肯定会留下蛛丝马迹,在同一个存储过程、 FN,View等中一起使用的表,就肯定上下文有联系,MSSQL有SP_Dependens这种内建存储过程,可以得到对象之间的关系线索,如果你的数据库没有这种内建机制,你可以列出所有的Create代码,简单文本处理一下就知道里边有哪些表了。
那么花一下午时间让程序跑完所有数据库表的嫌疑关系,我们就得到了这种东西:
这种东西以前我还希望人能清晰的看出来节点和边,做了一些基于力学原理的可视化图布局优化,现在看,没必要,因为这种关系已经超过人类的视觉理解了,只要计算机自己清楚就行了,没必要显示的好看,事实上因为边太多,不可能清晰好看,必然像蜘蛛网一样。
然后,还有十万字要写,我概括一下:
1,做个无限Visit关系的树,可以根据关系级联展开表,对表的字段进行选择,过滤,排序,聚合,聚合选择,聚合排序,聚合过滤等一堆勾选,就可以生成SQL了,测试预览执行进数仓。这才是真正的随心所欲ETL抽取,半技术的业务人员用鼠标即可操作,全程不需要写SQL。ETL工具如果不能给非技术人员用,那也就是个运维工具,没有核心价值
sql数据库 如何在插入一条数据时自动插入时间
1:第一种方式:sql数据库在插入一条数据时自动插入时间通常的方式是在插入的sql语句中使用数据库的时间函数进行处理。
sqlserver的时间函数getdate()函数就带代表当前的时间(只数据库服务器的当前时间)。
参考代码:
insert into table(v1,v2) values('111',getdate());
2:第二种方式:采用字段默认值的方式
即再数据库设计的时候,指定字段的默认值为getdate()。
参考代码:
insert into table(v1) values('111');
当不传递v2的值时,系统会自动添加系统时间。