1. 姓氏a上有同样的 

    SELECT empid, firstname, lastname
    FROM HR.Employees
    WHERE lastname LIKE ‘%a%a%’;

SWITCHOFFSET(SYSDATETIMEOFFSET(),’+00:00′) AS
[UTCDATETIME],–能够把日子转成UTC的

[转载]sql datepart ,dateadd,datediff,DateName函数

 (2011-09-13
15:16:56)

澳门威利斯人 1转载

标签: 

转载

分类: SQL语句(oracle,sql)

详细!!

初稿地址:sql datepart ,dateadd,datediff,DateName函数作者:碧空碧海

  1. 近年来系统日期、时间
    select getdate()

  2. dateadd 在向钦赐日期加上一段时间的基本功上,重回新的 datetime 值
    诸如:向日期加上2天
    select dateadd(day,2,’2004-10-15′) –返回:2004-10-17 00:00:00.000

  3. datediff 重返跨七个钦命日期的日期和时间界限数。
    select datediff(day,’2004-09-01′,’2004-09-18′) –返回:17

  4. datepart 重返代表内定日期的钦点日期部分的整数。
    SELECT DATEPART(month, ‘2004-10-15’) –返回 10

  5. datename 重返代表钦点日期的内定日期部分的字符串
    SELECT datename(weekday, ‘2004-10-15’) –返回:星期五

  6. day(), month(),year() –能够与datepart对照一下

select 当今天子=convert(varchar(10),getdate(),120)
,当前时光=convert(varchar(8),getdate(),114)

select datename(dw,’2004-10-15′)

select 上一季度第多少周=datename(week,’二〇〇三-10-15′)
,明天是周几=datename(weekday,’二零零二-10-15′)
函数 参数/功能
GetDate( ) 重临系统当下的日子与时间
DateDiff (interval,date1,date2) 以interval 钦赐的艺术,重临date2
与date1五个日子之间的差值 date2-date1
DateAdd (interval,number,date)
以interval内定的法子,加上number之后的日期
DatePart (interval,date)
重临日期date中,interval钦点部分所对应的整数值
DateName (interval,date)
再次回到日期date中,interval内定部分所对应的字符串名称

参数 interval的设定值如下:
值 缩 写(Sql Server) Access 和 ASP   说明
Year       Yy
                yyyy   年 1753 ~ 9999
Quarter       Qq     q   季 1 ~ 4
Month       Mm m   月1 ~ 12
Day of year   Dy y    一年的日数,一年中的第几日 1-366
Day       Dd d    日,1-31
Weekday       Dw w    22日的日数,24日中的第几日 1-7
Week       Wk ww    周,一年中的第几周 0 ~ 51
Hour       Hh h    时0 ~ 23
Minute       Mi n    分钟0 ~ 59
Second       Ss s    秒 0 ~ 59
Millisecond   Ms –    毫秒 0 ~ 999

access 和 asp
中用date()和now()获得系统日期时间;在那之中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,那一个函数的用法也附近

举例:
1.GetDate() 用于sql server :select GetDate()

2.DateDiff(‘s’,’二〇〇七-07-20′,’二〇〇五-7-25 22:56:32′)重回值为 514592 秒
DateDiff(‘d’,’二零零六-07-20′,’二零零七-7-25 22:56:32′)重回值为 5 天

3.DatePart(‘w’,’二零零七-7-25 22:56:32′)重临值为 2
即星期一(礼拜六为1,周末为7)
DatePart(‘d’,’二零零六-7-25 22:56:32′)再次回到值为 25即25号
DatePart(‘y’,’二零零五-7-25 22:56:32′)重临值为 206即这个时候中第206天
DatePart(‘yyyy’,’二零零六-7-25 22:56:32′)重临值为 二〇〇七即二〇〇六年

SQL Server DATEPART() 函数再次回到 SQLServer datetime 字段的一部分。

SQL Server DATEPART() 函数的语法是:
DATEPART(portion, datetime)
里面 datetime 是 SQLServer datetime 字段和部分的名号是下列之一: Ms for
Milliseconds
Yy for Year
Qq for Quarter of the Year
Mm for Month
Dy for the Day of the Year
Dd for Day of the Month
Wk for Week
Dw for the Day of the Week
Hh for Hour
Mi for Minute
Ss for Second

详见的辨证:

万般,你必要获得当后天期和总结一些别的的日期,比方,你的次第恐怕须求看清四个月的第一天可能最后一天。你们大多数人民代表大会概都知道如何把日子实行划分(年、月、日等),然后仅仅用分割出来的年、月、日等位居多少个函数中计算出团结所要求的日期!在那篇小说里,小编将报告您怎么运用DATEADD和
DATEDIFF函数来测算出在你的程序中大概您要用到的一部分不及日期。
在动用本文中的例子在此以前,你不可能一点都不小心以下的难题。超越四分之二只怕不是拥有例子在差别的机械上实施的结果大概不雷同,那统统由哪天是二个星期的率后天那个设置决定。第一天(DATEFIOdysseyST)设定调整了你的系统使用何时作为18日的率后天。全部以下的例子都以以周六看成一周的第一天来确立,也便是首后天设置为7。借让你的率先天设置差别,你可能需要调动那几个事例,使它和见仁见智的第一天设置相适合。你能够透过@@DATEFIEscortST函数来检查第一天设置。

为了精晓这么些事例,大家先复习一下
DATEDIFF和DATEADD函数。DATEDIFF函数总计多个日子之间的钟点、天、周、月、年等日子间隔总量。DATEADD函数统计一个日期通过给时间间隔加减来获得三个新的日子。要询问愈来愈多的DATEDIFF和DATEADD函数以及时光距离能够阅读微软联机帮忙。

使用
DATEDIFF和DATEADD函数来计量日期,和自然从此时此刻日子转形成您要求的日子的虚构方法有些不一样。你必得从岁月间隔这一个上边来思考。举例,从当昨日期到你要获取的日期之间有微微日子间隔,或然,从前天到某一天(例如一九零二-1-1)之间有些许日子间隔,等等。掌握什么重点于岁月距离有助于你轻易的明白自个儿的两样的日子总结例子。

三个月的第一天

率先个例证,小编将告诉你怎么从脚下日子去前段时间的尾声一天。请留神:这几个事例以及那篇作品中的其余例子都将只利用DATEDIFF和DATEADD函数来计量我们想要的日子。每叁个例证都将透过总计但前的时刻间隔,然后开展加减来收获想要总计的日子。

那是测算三个月第一天的SQL 脚本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

澳门威利斯人,我们把那么些讲话分开来拜访它是如何行事的。最中央的函数是getdate(),超越十一分之多少人都领悟那几个是回到当前的日子和岁月的函数。下二个推行的函数
DATEDIFF(mm,0,getdate())是计量当明日子和“一九零三-01-01
00:00:00.000”这几个日期之间的月数。记住:时代和岁月变量和纳秒同样是从“1905-01-01
00:00:00.000”开首计算的。那正是干吗您能够在DATEDIFF函数中钦点第二个日子表明式为“0”。下叁个函数是DATEADD,增添当前几日子到“一九零四-01-01”的月数。通过增添预约义的日期“一九零五-01-01”和目今天期的月数,大家得以获得前些时间的首先天。其他,总括出来的日期的小运部分将会是“00:00:00.000”。

本条计算的本事是先总括当前几天期到“一九零零-01-01”的年华间隔数,然后把它加到“一九零三-01-01”上来得到特殊的日期,那么些技能可以用来总结非常多不等的日子。下二个例子也是用那些技艺从当明天期来发出不一致的日子。

本周的周五

此地小编是用周(wk)的年华间隔来计量曾几何时是本周的周二。

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

一年的首后天

明天用年(yy)的时刻间隔来展现这年的率后天。

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

季度的首后天

如若你要计算那么些季度的首后天,那个例子告诉你该怎么做。

SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

当日的深夜

业已要求通过getdate()函数为了重返时间值截掉时间有些,就能考虑到当下日子是或不是在半夜。假若那样,那么些事例使用DATEDIFF和DATEADD函数来收获半夜三更的时间点。

SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

深远DATEDIFF和DATEADD函数总结

您能够明白,通过采取简易的DATEDIFF和DATEADD函数计算,你能够发掘非常多分裂的恐怕有含义的日子。

近年来截至的具备例子只是独自计算当前的小时和“1901-01-01”之间的小时距离数量,然后把它加到“一九〇四-01-01”的时间距离上来总结出日期。假定你改改时间间隔的数额,只怕采纳不一致的日子距离来调用DATEADD函数,可能减小时间间隔实际不是加多,那么通过这个小的调动你能够开掘和多不一致的日子。

那边有三个例证使用其他贰个DATEADD函数来计量最后一天来分别替换DATEADD函数前后八个时刻间隔。

下月的最终一天

那是四个总计上月最后一天的例子。它经过从7个月的结尾一天这么些事例上减小3飞秒来拿到。有有个别要铭记,在Sql
Server中时间是标准到3阿秒。那正是怎么自身索要减小3纳秒来获取本身要的日子和岁月。

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

计算出来的日期的流年部分含有了一个Sql
Server能够记下的一天的尾声每一日(“23:59:59:997”)的岁月。

2018年的末段一天

连日来上边的事例,为了要博得二〇一八年的尾声一天,你须要在当年的率后天上减小3皮秒。

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

前段日子的终极一天

奥门威尼人,于今,为了拿走上月的最终一天,作者急需多少修改一下收获下月的最后一天的言辞。修改须要给用DATEDIFF相比较当前些天子和“1902-01-01”重回的年华距离上加1。通过加1个月,我计算出后一个月的首先天,然后减去3阿秒,那样就计算出了本月的结尾一天。那是持筹握算上一个月最后一天的SQL脚本。

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

现年的末段一天

您今后应当调控这几个的做法,那是持筹握算本年最后一天脚本

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

上一个月的首先个周一

好了,以往是最终一个例子。这里笔者要总括前些时间的第一个周三。那是持筹握算的脚本。

select DATEADD(wk, DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

在这些例子里,小编动用了“本周的星期三”的剧本,并作了一丝丝改换。修改的某个是把原本剧本中“getdate()”部分替换到计算上月的第6天,在估测计算中用前段时期的第6天来替换当前几天期使得总括能够赢得上一个月的首先个周二。

总结

本身希望那些事例能够在你用DATEADD和DATEDIFF函数总计日期时给您或多或少启示。通过利用这些计算日期的时光距离的数学方法,作者发觉为了展现多少个日子之间距离的有用历法是有价值的。注意,那只是计量出那么些日子的一种办法。要铭记,还会有许多方法能够收获一致的企图结果。假若你有任何的方法,那很准确,即便你从未,小编期待这几个事例能够给您有的启示,当你要用DATEADD和DATEDIFF函数计算你程序也许要用到的日卯时。


附录,其余日期管理方法

1)去掉时分秒
declare @ datetime
set @ = getdate() –‘2003-7-1 10:00:00’
SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0)

2)展现星期几
select datename(weekday,getdate())

3)如何赢得有些月的气数
declare @m int
set @m=2 –月份
select datediff(day,’2003-‘+cast(@m as varchar)+’-15′ ,’2003-‘+cast(@m+1
as varchar)+’-15′)
除此以外,取得前段时间天数
select datediff(day,cast(month(GetDate()) as
varchar)+’-‘+cast(month(GetDate()) as varchar)+’-15′
,cast(month(GetDate()) as varchar)+’-‘+cast(month(GetDate())+1 as
varchar)+’-15′)
照旧选用总计前段日子的结尾一天的本子,然后用DAY函数区最后一天
SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)))

4)决断是还是不是闰年:
SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy,
DATEDIFF(yy,0,getdate()), 0)))) when 28 then ‘平年’ else ‘闰年’ end
或者
select case
datediff(day,datename(year,getdate())+’-02-01′,dateadd(mm,1,datename(year,getdate())+’-02-01′))
when 28 then ‘平年’ else ‘闰年’ end

5)几个季度多少天
declare @m tinyint,@time smalldatetime
select @m=month(getdate())
select @m=case when @m between 1 and 3 then 1
when @m between 4 and 6 then 4
when @m between 7 and 9 then 7
else 10 end
select
@time=datename(year,getdate())+’-‘+convert(varchar(10),@m)+’-01′
select datediff(day,@time,dateadd(mm,3,@time))

 
SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = EOMONTH(orderdate);

WHERE region<>N’WA’

0、Sql server中DateDiff()用法



 

DATEDIFF 函数 [日子和岁月]

功能 
回来多少个日子之间的区间。

语法 
DATEDIFF ( date-part, date-expression-1, date-expression-2 )

date-part :
year | quarter | month | week | day | hour | minute | second |
millisecond

参数 
date-part    钦赐要衡量其距离的日期部分。

有关日期部分的详细新闻,请参见日期部分。

date-expression-1    某一距离的前奏日期。从 date-expression-第22中学减去该值,再次回到几个参数之间 date-parts 的造化。

date-expression-2    某一间隔的终止日期。从该值中减去
Date-expression-1,再次回到四个参数之间 date-parts 的天命。

用法 
此函数总计多少个钦点日期之间日期部分的数量。结果为日期部分中分外(date2 –
date1)的有标识的整数值。

当结果不是日期部分的偶几倍时,DATEDIFF 将被截断并非被舍入。

当使用 day 作为日期部分时,DATEDIFF
再次回到多少个钦定的时日之内(饱含第四个日子但不包涵率先个日子)的中午数。

当使用 month 作为日期部分时,DATEDIFF
再次回到三个日子之间(包含第一个日子但不包蕴率先个日子)出现的月的首后天的数额。

当使用 week 作为日期部分时,DATEDIFF
再次回到五个日子(包涵第4个日子但不满含率先个日子)之间周日的数码。

对此更加小的小运单位存在溢出值:

milliseconds    24 天

seconds    68 年

minutes    4083 年

others    未有溢出限制

设若超过那些限制,此函数将赶回溢出荒谬。

专门的学业和兼容性 
SQL/92    Transact-SQL 扩展。

SQL/99    Transact-SQL 扩展。

Sybase    与 Adaptive Server Enterprise 兼容。

上面示例的言语再次回到 1:

SELECT datediff( hour, ‘4:00AM’, ‘5:50AM’ )上面包车型地铁话语重临 102:

SELECT datediff( month, ‘一九八六/05/02’, ‘一九九一/11/15’ )上边包车型客车言辞重回 0:

SELECT datediff( day, ’00:00′, ’23:59′ )下面包车型客车语句重回 4:

SELECT datediff( day,
   ‘1999/07/19 00:00’,
   ‘1998/07/23 23:59’ )上边包车型大巴言辞重返 0:

SELECT datediff( month, ‘1998/07/19’, ‘1997/07/23’ )上面包车型客车话语重返 1:

SELECT datediff( month, ‘1999/07/19’, ‘1999/08/23’ )

DATEDIFF(month, ‘一九九八1231’, orderdate)  相差多少月 
从19981231到 orderdate之间先查多少月

将字符串文字转成日期类型时,若无一点名时间,sqlserver则暗中同意用深夜光阴作为其时间值.

剔除建登时间当先3天的订单记录

 

delete 订单表 where datediff( dd, order_addtime, getdate() ) > 3
用函数datediff() datediff( dd, 时间1, 时间2
),意思是:总计时间1到时刻2以内的气数 所以,datediff( dd,
order_addtime, getdate() ) > 3,就是当先3天的

今天  

select * from 表名 where to_days(时间字段名) = to_days(now());  
昨天  
SELECT * FROM 表名 WHERETO_DAYS(NOW( ) ) – TO_DAYS(
时间字段名) <= 1  
7天  
SELECT * FROM 表名 whereDATE_SUB(CURDATE(), INTERVAL 7 DAY)
<=date(时间字段名)  
近30天  
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY)
<=date(时间字段名)  
本月  
SELECT * FROM 表名 WHEREDATE_FORMAT( 时间字段名, ‘%Y%m’ )
=DATE_FORMAT( CURDATE( ) , ‘%Y%m’ )  
上一月  
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , ‘%Y%m’ )
, date_format( 时间字段名, ‘%Y%m’ ) ) =1  
#查询二〇二〇年数据  
select * from `ht_invoice_information`
whereQUARTER(create_date)=QUARTER(now());  
#查询上季度数据  
select * from `ht_invoice_information` where
QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));  
#询问明年数据  
select * from `ht_invoice_information` where
YEAR(create_date)=YEAR(NOW());  
#询问二〇二〇年数据  
select * from `ht_invoice_information` where
year(create_date)=year(date_sub(now(),interval 1 year));  
询问当前下一周的多寡   
SELECT name,submittime FROM enterprise WHERE
YEARWEEK(date_format(submittime,’%Y-%m-%d’)) = YEARWEEK(now());  
询问下七日的数量  
SELECT name,submittime FROM enterprise
WHEREYEARWEEK(date_format(submittime,’%Y-%m-%d’))
=YEARWEEK(now())-1;  
询问当前月份的数据  
select name,submittime from enterprise   where
date_format(submittime,’%Y-%m’)=date_format(now(),’%Y-%m’)  
询问距离当前现行反革命三个月的多少  
select name,submittime from enterprise where submittime between
date_sub(now(),interval 6 month) and now();  
询问前些日子的数据  
select name,submittime from enterprise   where
date_format(submittime,’%Y-%m’)=date_format(DATE_SUB(curdate(),
INTERVAL 1 MONTH),’%Y-%m’)  
select * from ` user ` where DATE_FORMAT(pudate, ‘ %Y%m ‘ ) =
DATE_FORMAT(CURDATE(), ‘ %Y%m ‘ ) ;  
select * from user where WEEKOFYEAR(FROM_UNIXTIME(pudate,’%y-%m-%d’))
= WEEKOFYEAR(now())  
select *   
from user
where MONTH (FROM_UNIXTIME(pudate, ‘ %y-%m-%d ‘ )) = MONTH (now())  
select *   
from [ user ]   
where YEAR (FROM_UNIXTIME(pudate, ‘ %y-%m-%d ‘ )) = YEAR (now())  
and MONTH (FROM_UNIXTIME(pudate, ‘ %y-%m-%d ‘ )) = MONTH (now())  
select *   
from [ user ]   
where pudate between 前段时间最后一天  
and 前些时间先是天  
where date(regdate)   =   curdate();  
select   *   from   test   where year(regdate)=year(now())   and
month(regdate)=month(now())   and day(regdate)=day(now())  
SELECT date( c_instime ) ,curdate( )  
FROM `t_score`  
WHERE 1  
LIMIT 0 , 30 

二、相关函数简要介绍

 

三种写法  记住 能够用动态条件 区分记录

DISTINCT

一、MySQL查询今天、后日、下一周、近30天、二零一八年等的多寡的格局:

5.在order by 加限制排序条件

SQL辅助两种字符数据类型:普通字符和Unicode字符。

 

SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = DATEADD(month, DATEDIFF(month, '19991231', orderdate), '19991231');

cast是ANSI的标准SQL.

DATEADD(month, DATEDIFF(month, ‘一九九八1231’, orderdate), ‘壹玖玖捌1231’)
中间是丰盛的月数  最后叁个从哪些时间起头加

可以认为在同一SELECT子句中差别一时间钦赐DISTINCT和ROW NUMBE中华V是一条最棒实施,

多个条件 0,1 暗许排序法规 通过int 对相应的规格进行排序

–WHERE

SELECT custid, region
FROM Sales.Customers
ORDER BY
  CASE WHEN region IS NULL THEN 1 ELSE 0 END, region;

 就算SELECT语句中涉嫌到分组,则前面包车型地铁select order
having的操作对象将是分组。

SELECT custid, orderdate, orderid,
  ROW_NUMBER() OVER(PARTITION BY custid ORDER BY orderdate, orderid) AS rownum
FROM Sales.Orders
ORDER BY custid, rownum;

回到总价超越10000的订单

首先种 是指向寻觅  固定的对准  第三种没有能够多字段条件

 

4.标准筛选case

–ORDERDATE =
dateadd(month,datediff(month,’19991231′,orderdate),’19991231′)

 

本内容是自身上学tsql二零零六的开卷笔记

 使用EMONTH 对输入的日子重回月末日期   类似动态条件

–LEN(lastname) – len(replace(lastname,’a’,”))>1

3.对各种顾客的订单日期排序

ORDER BY

1.重返 每月最终一天订单

DateTime2 精度可控,並且帮助的限制从0001初阶到9999.

SELECT empid, firstname, lastname, titleofcourtesy,
  CASE titleofcourtesy
    WHEN 'Ms.'  THEN 'Female'
    WHEN 'Mrs.' THEN 'Female'
    WHEN 'Mr.'  THEN 'Male'
    ELSE             'Unknown'
  END AS gender
FROM HR.Employees;

SELECT empid, firstname, lastname, titleofcourtesy,
CASE 
WHEN titleofcourtesy IN('Ms.', 'Mrs.') THEN 'Female'
WHEN titleofcourtesy = 'Mr.' THEN 'Male'
ELSE 'Unknown'
END AS gender
FROM HR.Employees;

OVER

TOP

 

EXEC sp_helpconstraint N’SCORE’

SELECT

DateTimeoffset 临时区部分能够开展辨认

N表示National,用于表示字符串是Unicode数据类型(NCHA翼虎或NVARCHA路虎极光).

咱俩尽量接纳职业的SQL,并非TSQL,即便他们能表示成同样的意义.比方得到当前些天龙时间时精选current_timestamp比GetDate()要好些.

 

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注