sqlserver日期函数,SQL Server如何获取日期表示去年的今天
sqlserver日期函数,SQL Server如何获取日期表示去年的今天详细介绍
本文目录一览: sqlserver截取日期的年份和月份怎么写?
sqlserver截取日期年份和月份使用datepart函数,函数使用方法如下:
一、函数功能:DATEPART()函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
二、语法:DATEPART(datepart,date)
三、参数说明:date 参数是合法的日期表达式。datepart 参数可以是下列的值:
四、实例
1、截取年份:datepart(yy,'2017-1-1')返回:2017
2、截取月份:datepart(mm,'2017-1-1')返回:1
五、datepart函数返回的是整型数值,如果需要返回字符型,那么使用datename()函数,用法与datepart相同,只是返回数据类型不同。
从sqlserver数据库中提取日期,并把年月日分别截取出来
思路:先把日期转换成字符格式,再通过字符串操作函数截取想要的部分,最后拼凑上你要的部分
比如:a=2009-9-15
0:00:00
left(convert(varchar(20),a,120),7)+'-01
0:00:00
'
说明一下,convert这个函数强制把日期格式转换成varchar型,120是参数,按ODBC标准,yyyy-mm-dd
hh:mm:ss格式
以上是思路,你自己修改一下就可以得到你要的东西
可以用substring截取,也可以转换成datetime然后用year、month、day三个函数计算
以标准日期格式2012-12-19
10:50:02.000为例
substring(col,1,4)=year
substring(col,6,2)=month
substring(col,9,2)=day
year(convert(datetime,col))、month(convert(datetime,col))、day(convert(datetime,col))
从sqlserver数据库中提取日期应该使用,并把年月日分别截取出来应该使用
数据库提供的时间函数。
1:使用year,month,day用来提取年月日
如:select
year(getdate()),month(getdate()),day(getdate())
2:使用DATEPART
获取年月日
如:select
DATEPART('year',getdate()),DATEPART('month',getdate()),DATEPART('day',getdate())
----------------------------------------------------------------------------
如果字段是varchar类型的话,可以先将字段转换为日期类型。
使用类型转换函数convert或者cast
如:cast('2015-07-14'
as
datetime)
SQL SERVER查询时间是一年中第几周的函数
SQL SERVER查询时间是一年中第几周的函数?1、获取当前系统数据库的日期和时间,可以利用函数GETDATE(),select GETDATE()。
2、获取当前世界标准时间的日期时间值,利用GETUTCDATE()函数,select GETUTCDATE()。
3、获取某个日期时间中的日期,可以利用DAY()函数,select DAY(日期)。
4、获取日期中的月份,利用MONTH()函数,select MONTH(日期)。
5、获取日期中的年份,利用YEAR()函数,select YEAR(日期)。
6、获取日期中指定部分字符串值的,可以利用函数DATENAME()函数。
如何计算是第几周
这个只能循环判断吧。 首先先判断一下这个周是否有26号。如果有,就判断26号是周几,不管结果如何,加周标识,或者本周的起始日期,然后再循环判断下周。
sql server关于判断日期为当月第几周星期几问题
星期几问题:DatePart, DateName 都可以满足你的要求了 当月第几周:简单点,用 DatePart,这个可能跟系统区域语言设置有关(国外都是周日是第一天,中国周一是第一天),具体想更好,就自己看着办啦。 举个例:求 2013/11/07是11月第几周 SELECT DATEPART(WEEK, '2013/11/07') - DATEPART(WEEK, '2013/11/01') + 1 即,求出 11月7 号是一年中第几周,减去 11月1 号是一年中第几周的值,因从 1 开始计数,所以加个 1
1、获取当前系统数据库的日期和时间,可以利用函数GETDATE(),select GETDATE()。
2、获取当前世界标准时间的日期时间值,利用GETUTCDATE()函数,select GETUTCDATE()。
3、获取某个日期时间中的日期,可以利用DAY()函数,select DAY(日期)。
4、获取日期中的月份,利用MONTH()函数,select MONTH(日期)。
5、获取日期中的年份,利用YEAR()函数,select YEAR(日期)。
6、获取日期中指定部分字符串值的,可以利用函数DATENAME()函数。
1、DATEADD(datepart,number,date)
作用:返回给指定日期加一个时间间隔后新的datetime值
参数说明:
datepart:指定为日期的哪部分增加数值。
常用的值有:年(yy/yyyy),季度(qq/q),月份(mm/m),日(day/dd/d),周(wk/ww),小时(hh),分钟(mi,n),秒(ss/s)。
number:指定要增加的数值。如果是非整数将会舍去小数部分。负数表示减去相应的时间间隔。
date:表示要处理的日期。
用法:
-- 在指定日期上加三个月
select DATEADD(mm,3,'2020-12-30');
-- 指定日期减一天
select DATEADD(day,-1,'2020-12-30');
2、DATEDIFF(datepart,startdate,enddate)
作用:指定两个时间相差的时间数。比如天、小时、分钟等等。
参数说明:
datepart:指定返回的日期时间维度(天、小时、分钟)。
常用的值有:年(yy/yyyy),季度(qq/q),月份(mm/m),日(day/dd/d),周(wk/ww),小时(hh),分钟(mi,n),秒(ss/s)。
startdate:可以理解被减数。
enddate:可以理解减数。如果startdate大于enddate返回负值。
用法:
SELECT DATEDIFF(day,'2021-02-05','2021-02-09') AS DiffDate --返回 4天
3、DATENAME(deatpart,date)
作用:返回指定日期的指定部分的字符串。
参数说明:
datepart:指定返回的日期时间维度(天、小时、分钟)。
常用的值有:年(yy/yyyy),季度(qq/q),月份(mm/m),日(day/dd/d),周(wk/ww),小时(hh),分钟(mi,n),秒(ss/s)。
date:日期表达式
用法:
DateName(quarter,GetDate()) as '第几季度'
DateName(week,GetDate()) as '一年中的第几周'
DateName(DAYOFYEAR,GetDate()) as '一年中的第几天'
DateName(year,GetDate()) as '年'
DateName(month,GetDate()) as '月'
DateName(day,GetDate()) as '日'
DateName(hour,GetDate()) as '时'
DateName(minute,GetDate()) as '分'
DateName(second,GetDate()) as '秒'
4、DATEPART(deatpart,date)
返回指定日期中指定部分的整数。用法和DATENAME相似,返回值为整数。比如:
SELECT DATEPART(weekday,'20210209') --返回值为2
SELECT DateName(weekday,'20210209') --返回值为星期二
5、DAY|MONTH|YEAR 函数
作用:返回指定日期所在 日/月/年的部分。可以用DATEPART替换。
用法:
SELECT DAY('2021-02-09') --返回 9
SELECT MONTH('2021-02-09') --返回 2
SELECT YEAR('2021-02-09') --返回 2021
6、EOMONTH(input[,month_to_add])
作用:该函数是在SQLServer 2012中引入的。EOMONTH函数用来返回指定日期之前或之后某个月的最后一天的日期。
语法结构:=EOMONTH(开始日期,指定起始日期前后的月份)
用法;
DECLARE @date DATETIME = '2021-02-09';
SELECT EOMONTH ( @date,7) AS Result; --加七个月的月末日期 2021-09-30
SELECT EOMONTH ( @date,-2) AS Result; -- 减两个月的月末日期 2020-12-31
7、FROMPARTS
作用:根据输入的年、月、日参数生成一个日期值,并返回。
要计算特定日期是本年度的第几周。
有人认为每周日是每周的第一天,还有人习惯认为每周一是每周的第一天,不管是那种认定方式,都可以用WEEKNUM来解决这个问题,只不过参数不同而已。
WEEKNUM函数基础
功能:
返回特定日期的周数。
语法:
WEEKNUM(serial_number,[return_type])
参数:
Serial_number:必需。代表一周中的日期。 应使用 DATE函数输入日期,或者将日期作为其他公式或函数的结果输入。例如,使用函数 DATE(2008,5,23)输入 2008 年 5 月 23 日。如果日期以文本形式输入,则会出现问题。
Return_type:可选。一数字,确定星期从哪一天开始。 默认值为 1。不同数字与每周以哪一天开始对应如下表:
Return_type 一周的第一天为 1 或省略 星期日 2 星期一 11 星期一 12 星期二 13 星期三 14 星期四 15 星期五 16 星期六 17 星期日
undefined
举例:
日期 2018/6/10 (2018/6/10为周日) 公式 结果 说明 =WEEKNUM(B1) 24 2018/6/10 在2018年中的周数,一周开始于星期日(默认值) =WEEKNUM(B1,2) 23 2018/6/10 在2018年中的周数,一周开始于星期一(第二个参数 2)
本例解析
本示例中,周日为每周第一天的公式为:
=WEEKNUM(A3)
本示例中,周一为每周第一天的公式为:
=WEEKNUM(A3,2)
、DATEADD(datepart,number,date)
作用:返回给指定日期加一个时间间隔后新的datetime值
参数说明:
datepart:指定为日期的哪部分增加数值。
常用的值有:年(yy/yyyy),季度(qq/q),月份(mm/m),日(day/dd/d),周(wk/ww),小时(hh),分钟(mi,n),秒(ss/s)。
number:指定要增加的数值。如果是非整数将会舍去小数部分。负数表示减去相应的时间间隔。
date:表示要处理的日期。
用法:
-- 在指定日期上加三个月
select DATEADD(mm,3,'2020-12-30');
-- 指定日期减一天
select DATEADD(day,-1,'2020-12-30');
2、DATEDIFF(datepart,startdate,enddate)
作用:指定两个时间相差的时间数。比如天、小时、分钟等等。
参数说明:
datepart:指定返回的日期时间维度(天、小时、分钟)。
常用的值有:年(yy/yyyy),季度(qq/q),月份(mm/m),日(day/dd/d),周(wk/ww),小时(hh),分钟(mi,n),秒(ss/s)。
startdate:可以理解被减数。
enddate:可以理解减数。如果startdate大于enddate返回负值。
用法:
SELECT DATEDIFF(day,'2021-02-05','2021-02-09') AS DiffDate --返回 4天
3、DATENAME(deatpart,date)
作用:返回指定日期的指定部分的字符串。
参数说明:
datepart:指定返回的日期时间维度(天、小时、分钟)。
常用的值有:年(yy/yyyy),季度(qq/q),月份(mm/m),日(day/dd/d),周(wk/ww),小时(hh),分钟(mi,n),秒(ss/s)。
date:日期表达式
用法:
DateName(quarter,GetDate()) as '第几季度'
DateName(week,GetDate()) as '一年中的第几周'
DateName(DAYOFYEAR,GetDate()) as '一年中的第几天'
DateName(year,GetDate()) as '年'
DateName(month,GetDate()) as '月'
DateName(day,GetDate()) as '日'
DateName(hour,GetDate()) as '时'
DateName(minute,GetDate()) as '分'
DateName(second,GetDate()) as '秒'
4、DATEPART(deatpart,date)
返回指定日期中指定部分的整数。用法和DATENAME相似,返回值为整数。比如:
SELECT DATEPART(weekday,'20210209') --返回值为2
SELECT DateName(weekday,'20210209') --返回值为星期二
5、DAY|MONTH|YEAR 函数
作用:返回指定日期所在 日/月/年的部分。可以用DATEPART替换。
用法:
SELECT DAY('2021-02-09') --返回 9
SELECT MONTH('2021-02-09') --返回 2
SELECT YEAR('2021-02-09') --返回 2021
6、EOMONTH(input[,month_to_add])
作用:该函数是在SQLServer 2012中引入的。EOMONTH函数用来返回指定日期之前或之后某个月的最后一天的日期。
语法结构:=EOMONTH(开始日期,指定起始日期前后的月份)
SQL SERVER查询时间是一年中第几周,使用函数 datepart()。
例:查询 ‘2017-1-1’是2017年的第几周,语句如下
select datepart(wk,'2017-1-1')
datepart函数说明
一、函数功能:DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
二、语法:DATEPART(datepart,date)
三、参数说明:date 参数是合法的日期表达式。datepart 参数可以是下列的值:
四、实例演示
假设我们有下面这个 "Orders" 表:
我们使用如下 SELECT 语句:
SELECT DATEPART(yyyy,OrderDate) AS OrderYear,DATEPART(mm,OrderDate) AS OrderMonth,DATEPART(dd,OrderDate) AS OrderDayFROM OrdersWHERE OrderId=1结果:
从sqlserver数据库中提取日期,并把年月日分别截取出来
从sqlserver数据库中提取日期应该使用,并把年月日分别截取出来应该使用
数据库提供的时间函数。
1:使用year,month,day用来提取年月日
如:select year(getdate()),month(getdate()),day(getdate())
2:使用DATEPART 获取年月日
如:select DATEPART('year',getdate()),DATEPART('month',getdate()),DATEPART('day',getdate())
----------------------------------------------------------------------------
如果字段是varchar类型的话,可以先将字段转换为日期类型。
使用类型转换函数convert或者cast
如:cast('2015-07-14' as datetime)
思路:先把日期转换成字符格式,再通过字符串操作函数截取想要的部分,最后拼凑上你要的部分
比如:a=2009-9-15 0:00:00
left(convert(varchar(20),a,120),7)+'-01 0:00:00 '
说明一下,convert这个函数强制把日期格式转换成varchar型,120是参数,按ODBC标准,yyyy-mm-dd hh:mm:ss格式
以上是思路,你自己修改一下就可以得到你要的东西
可以用substring截取,也可以转换成datetime然后用year、month、day三个函数计算
以标准日期格式2012-12-19 10:50:02.000为例
substring(col,1,4)=year
substring(col,6,2)=month
substring(col,9,2)=day
year(convert(datetime,col))、month(convert(datetime,col))、day(convert(datetime,col))
select convert(varchar,datepart(year,getdate()))--年
+'-'+convert(varchar,datepart(month,getdate()))--月
+'-'+convert(varchar,datepart(day,getdate()))--日
select convert(varchar,datepart(year,[日期字段]))--年
select convert(varchar,datepart(month,[日期字段]))--月
select convert(varchar,datepart(day,[日期字段]))--日
create table TTable(TM varchar(20))
insert into TTable values(getdate())
select Year(TM) Year,Month(TM) Month,Day(TM) Day from TTable
工具/材料:Management Studio。
1、首先在桌面上,点击“Management Studio”图标。
2、然后在该界面中,点击左上角工具栏里“新建查询”按钮。
4、之后在该界面中,输入提取日期,并把年月日分别截取出来的SQL语句“select year(getdate()),month(getdate()),day(getdate())”。
5、然后在该界面中,点击上方左侧的“执行”按钮。
6、最后在该界面中,显示分别截取出来的年月日。
从sqlserver数据库中提取日期,并把年月日分别截取出来
可以用substring截取,也可以转换成datetime然后用year、month、day三个函数计算
以标准日期格式2012-12-19
10:50:02.000为例
substring(col,1,4)=year
substring(col,6,2)=month
substring(col,9,2)=day
year(convert(datetime,col))、month(convert(datetime,col))、day(convert(datetime,col))
SQL Server如何获取日期表示去年的今天
var day=365;
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
day =366;
就是闰年 和平年
当前时间 - day
select dateadd(year,-1,getdate()) 不行吗?
select dateadd(y,-1,getdate())
使用sqlserver中的时间函数:dateAdd(yy,-1,getdate())
sql语句是:
select dateAdd(yy,-1,getdate()).
整数是向前,负数是向后
timestampdiff不可以识别的内置函数怎么解决sqlserver?
在SQL Server中,如果使用timestampdiff函数出现问题,可以尝试使用其内部设置函数进行日期时间计算。
SQL Server中常用的日期时间计算函数包:
datediff: 用于计算两个日期之间的差值,返回值为整数。
dateadd: 用于对日期加上指定的时间间隔,返回值作为日期时间类型。
datepart: 用于返回日期时间类型中的指标部分,例如年、月、日、时、分、秒等。
下面是一个使用datediff函数计算两个日期之间的天数的演示:
SELECT DATEDIFF(day, '2022-04-01', '2022-04-30') AS days;
以上示例中,第一个参数指定了计算偏差的时间单位,第二个和第三个参数分别为计算偏差的两个日期。
可以根据具体需要选择合适的日期时间计算函数来解决问题。
sql server 字段 年月日时分
在Word中插入当前的日期和时间
用户可以随时使用快捷键在Word文档中插入当前的日期或时
间。方法很简单,只需要将光标置于需要插入日期或时间的位置
,按下Alt+Shift+D组合键即可插入日期,而按下Alt+Shift+T可
插入当前时间。用户也可以执行“插入”菜单上的“日期和时间
”来完成同样的工作
select convert(varchar(16),getdate(),120)
可以看一看sqlserver的日期函数的种类,在这给列一列,之后你可以试一试:
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
select datediff(day,'2004-09-18','2004-09-01') --返回:-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,'2004-10-15')
,今天是周几=datename(weekday,'2004-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 一周的日数,一周中的第几日 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','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒
DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天
3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)
DatePart('d','2005-7-25 22:56:32')返回值为 25即25号
DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天
DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年
具体的语法:
日期函数用来操作DATETIME 和SMALLDATETIME 类型的数据,执行算术运算。与其它函数一样,可以在
Select 语句的Select 和Where 子句以及表达式中使用日期函数。其使用方法如下:
日期函数参数,其中参数个数应不同的函数而不同。
·DAY()
DAY() 函数语法如下:
DAY (
)
DAY() 函数返回date_expression 中的日期值。
·MONTH()
MONTH() 函数语法如下:
MONTH (
)
MONTH() 函数返回date_expression 中的月份值。
与DAY() 函数不同的是,MONTH() 函数的参数为整数时,一律返回整数值1,即SQL Server 认为其
是1900 年1 月。
·YEAR()
YEAR() 函数语法如下:
YEAR (
)
YEAR() 函数返回date_expression 中的年份值。
提醒:在使用日期函数时,其日期值应在1753年到9999年之间,这是SQL Server系统所能识别的日期范
围,否则会出现错误。
·DATEADD()
DATEADD() 函数语法如下:
DATEADD (
,
,
)
DATEADD() 函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期。参数“datepart
” 在日期函数中经常被使用,它用来指定构成日期类型数据的各组件,如年、季、月、日、星期等。
其取值如表4-9 所示:
·DATEDIFF()
DATEDIFF() 函数语法如下:
DATEDIFF() (
,
,
)
DATEDIFF() 函数返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其
结果值是一个带有正负号的整数值。针对不同的datepart, DATEDIFF()函数所允许的最大差距值不
一样,如:datepart 为second 时,DATEDIFF() 函数所允许的最大差距值为68: 年datepart 为
millisecond 时,DATEDIFF() 函数所允许的最大差距值为24 天20 小时30 分23 秒647 毫秒。
·DATENAME()
DATENAME() 函数语法如下:
DATENAME (
,
DATENAME() 函数以字符串的形式返回日期的指定部分此部分。由datepart 来指定。
·DATEPART()
DATEPART() 函数语法如下:
DATEPART (
,
)
DATEPART() 函数以整数值的形式返回日期的指定部分。此部分由datepart 来指定。
DATEPART (dd, date) 等同于DAY (date)
DATEPART (mm, date) 等同于MONTH (date)
DATEPART (yy, date) 等同于YEAR (date)
·GETDATE()
GETDATE() 函数语法如下:
GETDATE()
GETDATE() 函数以DATETIME 的缺省格式返回系统当前的日期和时间,它常作为其它函数或命令的参
数使用。
在开发数据库应用中,经常会遇到处理时间的问题,如查询指定时间的记录等。下面就这些常见的问题
,结合自己的一些经验,和大家探讨一下这类问题。
首先介绍一下,SQL Server里处理时间的几个主要函数的用法:
getdate()函数:取得系统当前的日期和时间。返回值为datetime类型的。
用法:getdate()
例子:
select getdate() as dte,dateadd(day,-1,getdate()) as nowdat
输出结果:
dte nowdat
1999-11-21 19:13:10.083 1999-11-20 19:13:10.083
(1 row(s) affected)
datepart()函数:以整数的形式返回时间的指定部分。
用法:datepart(datepart,date)
参数说明:datepart时要返回的时间的部分,常用取值year、month、day、hour、minute。
date是所指定的时间。
例子:
SELECT DATEPART(month, GETDATE()) AS 'Month Number'
输出结果:
Month Number
11
(1 row(s) affected)
dateadd()函数:通过给指定的时间的指定部分加上一个整数值以返回一个新时间值。
用法:dateadd(datepart,number,date)
参数说明:datepart(同上)
date(同上)
number要增加的值,整型,可正可负,正值返回date之后的时间值,负值返回date
之前的时间值
例子:
select getdate() as today
select dateadd(day,-1,getdate())
select dateadd(day,1,getdate())
输出:
today
1999-11-21 19:42:41.410
(1 row(s) affected)
yesterday
1999-11-20 19:42:41.410
(1 row(s) affected)
tomorrow
1999-11-22 19:42:41.410
(1 row(s) affected)
datediff()函数:返回两个时间以指定时间部分来计算的差值。返回整数值。如1991-6-12和1991-6-21
之间以天
来算相差9天,1998-6-12和1999-6-23按年算相差1年,1999-12-1和1999-3-12按月算相差9个月
用法:datediff(darepart,date1,date2)
参数说明:datepart(同上)
date1、date2(同上date)
例子:
select datediff(month,'1991-6-12','1992-6-21') as a
sqlserver 写一个函数,能获取两个日期之间的周一到周五的总天数
drop function dbo.f_get_workdaysgoCREATE FUNCTION dbo.f_get_workdays(@bdate DATETIME, @edate DATETIME) RETURNS INTEGERAS BEGIN DECLARE @workdays INTEGER IF @bdate > @edate RETURN -1 SELECT @workdays = --如果终止日期与起始日期在同一个星期内,只需要计算有几天即可 CASE WHEN DATEPART(wk, @edate-1)-DATEPART(wk,@bdate) = 0 THEN CASE WHEN DATEPART(dw, @bdate) > 5 THEN 0 WHEN DATEPART(dw, @edate-1) > 5 THEN 6 - DATEPART(dw, @bdate) ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END --如果终止日期与起始日期在不同的星期内 --首先计算出除前后两个星期外完整的星期数 * 5 ELSE (DATEDIFF(dd,@bdate,@edate) - (8-DATEPART(dw, @bdate)) - DATEPART(dw, @edate-1)) / 7 * 5 --再加上第一个星期里的工作日数 + CASE WHEN DATEPART(dw, @bdate) < 6 THEN 6 - DATEPART(dw, @bdate) ELSE 0 END --加上末一个星期里的工作日数 + CASE WHEN DATEPART(dw, @edate-1)>5 THEN 5 ELSE DATEPART(dw, @edate-1) END END RETURN @workdays ENDgoselect dbo.f_get_workdays(dateadd(day,-21,getdate()),getdate())