sql计算天数.docx
《sql计算天数.docx》由会员分享,可在线阅读,更多相关《sql计算天数.docx(15页珍藏版)》请在冰豆网上搜索。
sql计算天数
sql计算天数
SELECTdateadd(ms,-1,DATEADD(mm,DATEDIFF(m,0,getdate()),0))asmouthfirstdate,dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))asmouthlastdate
===============================最后一天=========================================
本月【数据所在服务器】最后一天:
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))asmouthlastdate
下月【数据所在服务器】最后一天:
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0))asmouthlastdate
下下月【数据所在服务器】最后一天:
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+3,0))asmouthlastdate
下下下月【数据所在服务器】最后一天:
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+4,0))asmouthlastdate
下下下月【数据所在服务器】最后一天:
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+5,0))asmouthlastdate
下下下下月【数据所在服务器】最后一天:
SELECTdateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+6,0))asmouthlastdate
===============================第一天===========================================
本月第一天
SELECTdateadd(ms,-1,DATEADD(mm,DATEDIFF(m,0,getdate()),0))asmouthlastdate
下月第一天:
SELECTdateadd(ms,-1,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))asmouthlastdate
下下月第一天:
SELECTdateadd(ms,-1,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0))asmouthlastdate
================================================================================
selectCONVERT(varchar,getdate(),120)----------------->>SQL语句
2004-09-1211:
06:
08---------------------------------->>显示结果(以下类同)
selectreplace(replace(replace(CONVERT(varchar,getdate(),120),\''-\'',\''\''),\''\'',\''\''),\'':
\'',\''\'')
20040912110608
selectCONVERT(varchar(12),getdate(),111)
2004/09/12
selectCONVERT(varchar(12),getdate(),112)
20040912
selectCONVERT(varchar(12),getdate(),102)
2004.09.12
selectCONVERT(varchar(12),getdate(),101)
09/12/2004
selectCONVERT(varchar(12),getdate(),103)
12/09/2004
selectCONVERT(varchar(12),getdate(),104)
12.09.2004
selectCONVERT(varchar(12),getdate(),105)
12-09-2004
selectCONVERT(varchar(12),getdate(),106)
12092004
selectCONVERT(varchar(12),getdate(),107)
0912,2004
selectCONVERT(varchar(12),getdate(),108)
11:
06:
08
selectCONVERT(varchar(12),getdate(),109)
091220041
selectCONVERT(varchar(12),getdate(),110)
09-12-2004
selectCONVERT(varchar(12),getdate(),111)
2007-3-23
selectCONVERT(varchar(12),getdate(),113)
120920041
selectCONVERT(varchar(12),getdate(),114)
11:
06:
08.177
设置默认值时去掉"select"单词。
--------------------------------------------------------------------------------
另附函数:
FormatDateTime(Date,vbShortDate)转化为短日期格式这个是你要的.
FromatDateTime(Date,vbLongDate)以
长日期格式显示
FormatDateTime(Date,vbLongDate)转化为长日期格式
FormatDateTime(Date,vbShortTime)转化为短时间格式
FormatDateTime(Date,vbLongTime)转化为长时间格式
=================================================================================
日期和时间函数:
SqlServer中的日期与时间函数
1.当前系统日期、时间
selectgetdate()
2.dateadd在向指定日期加上一段时间的基础上,返回新的datetime值
例如:
向日期加上2天
selectdateadd(day,2,'2004-10-15')--返回:
2004-10-1700:
00:
00.000
3.datediff返回跨两个指定日期的日期和时间边界数。
selectdatediff(day,'2004-09-01','2004-09-18')--返回:
17
4.datepart返回代表指定日期的指定日期部分的整数。
SELECTDATEPART(month,'2004-10-15')--返回10
5.datename返回代表指定日期的指定日期部分的字符串
SELECTdatename(weekday,'2004-10-15')--返回:
星期五
6.day(),month(),year()--可以与datepart对照一下
select当前日期=convert(varchar(10),getdate(),120),
当前时间=convert(varchar(8),getdate(),114)
selectdatename(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的设定值如下:
值缩写(SqlServer)(Access和ASP)说明
YearYyyyyy年1753~9999
QuarterQqq季1~4
MonthMmm月1~12
DayofyearDyy一年的日数,一年中的第几日1-366
DayDdd日,1-31
WeekdayDww一周的日数,一周中的第几日1-7
WeekWkww周,一年中的第几周0~51
HourHhh时0~23
MinuteMin分钟0~59
SecondSss秒0~59
MillisecondMs-毫秒0~999
access和asp中用date()和now()取得系统日期时间;
其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似
举例:
1.GetDate()用于sqlserver:
selectGetDate()
2.DateDiff('s','2005-07-20','2005-7-2522:
56:
32')返回值为514592秒
DateDiff('d','2005-07-20','2005-7-2522:
56:
32')返回值为5天
3.DatePart('w','2005-7-2522:
56:
32')返回值为2即星期一(周日为1,周六为7)
DatePart('d','2005-7-2522:
56:
32')返回值为25即25号
DatePart('y','2005-7-2522:
56:
32')返回值为206即这一年中第206天
DatePart('yyyy','2005-7-2522:
56:
32')返回值为2005即2005年
本月的最后一天
现在,为了获得本月的最后一天,我需
要稍微修改一下获得上个月的最后一天的语句。
修改需要给用DATEDIFF比较当前日期和“19000101”返回的时间间隔上加1。
通过加1个月,我计算出下个月的第一天,然后减去3毫秒,这样就计算出了这个月的最后一天。
这是计算本月最后一天的SQL脚本。
Selectdateadd(ms,3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
动态SQL拼接
分类:
DATABASE_STUDY2011-10-1400:
0411人阅读评论(0)收藏举报
declare@RowCountint
declare@sqlnvarchar(500)
set@sql='selecttop'+convert(varchar,@RowCount)+'[SERIAL_NO],[MSG_NO]intoTempRecordfrom[dbo].[Temp_MsgHead]orderby[REC_DATE]'
execsp_executesql@sql
select*fromTempRecord
truncatetableTempRecord
droptableTempRecord
常用函数对比
分类:
DATABASE_STUDY2011-09-1422:
2738人阅读评论(0)收藏举报
ISNULL(参数1,参数2)
若参数1为空,则返回参数2
NULLIF(参数1,参数2)
若参数1和参数2不等,则返回参数1
若参数1和参数2相等,则返回NULL
例子:
ISNULL(NULLIF(字段名XX,''),'AAA')
ISNUMERIC(参数1)
判断参数1是否为数字,是数字就返回1,不是数字、空字符串、Null则返回0
---------数学函数
1.绝对值
S:
selectabs(-1)value
O:
selectabs(-1)valuefromdual
2.取整(大)
S:
selectceiling(-1.001)value
O:
selectceil(-1.001)valuefromdual
3.取整(小)
S:
selectfloor(-1.001)value
O:
selectfloor(-1.001)valuefromdual
4.取整(截取)
S:
selectcast(-1.002asint)value
O:
selecttrunc(-1.002)valuefromdual
5.四舍五入
S:
selectround(1.23456,4)value1.23460
O:
selectround(1.23456,4)valuefromdual1.2346
6.e为底的幂
S:
selectExp
(1)value2.7182818284590451
O:
selectExp
(1)valuefromdual2.71828182
7.取e为底的对数
S:
selectlog(2.7182818284590451)value1
O:
selectln(2.7182818284590451)valuefromdual;1
8.取10为底对数
S:
selectlog10(10)value1
O:
selectlog(10,10)valuefromdual;1
9.取平方
S:
selectSQUARE(4)value16
O:
selectpower(4,2)valuefromdual16
10.取平方根
S:
selectSQRT(4)value2
O:
selectSQRT(4)valuefromdual2
11.求任意数为底的幂
S:
selectpower(3,4)value81
O:
selectpower(3,4)valuefromdual81
12.取随机数
S:
selectrand()value
O:
selectsys.dbms_random.value(0,1)valuefromdual;
13.取符号
S:
selectsign(-8)value-1
O:
selectsign(-8)valuefromdual-1
14.圆周率
S:
SELECTPI()value3.1415926535897931
O:
不知道
15.sin,cos,tan参数都以弧度为单位
例如:
selectsin(PI()/2)value得到1(SQLServer)
16.Asin,Acos,Atan,Atan2
返回弧度
17.弧度角度互换(SQLServer,Oracle不知道)
DEGREES:
弧度-〉角度
RADIANS:
角度-〉弧度
---------数值间比较
18.求集合最大值
S:
selectmax(value)valuefrom
(select1value
union
select-2value
union
select4value
union
select3value)a
O:
selectgreatest(1,-2,4,3)valuefromdual
19.求集合最小值
S:
selectmin(value)valuefrom
(select1value
union
select-2value
union
select4value
union
select3value)a
O:
selectleast(1,-2,4,3)valuefromdual
20.如何处理null值(F2中的null以10代替)
S:
selectF1,IsNull(F2,10)valuefromTbl
O:
selectF1,nvl(F2,10)valuefromTbl
--------数值间比较
21.求字符序号
S:
selectascii('a')value
O:
selectascii('a')valuefromdual
22.从序号求字符
S:
selectchar(97)value
O:
selectchr(97)valuefromdual
23.连接
S:
select'11'+'22'+'33'value
O:
selectCONCAT('11','22')||33valuefromdual
23.子串位置--返回3
S:
selectCHARINDEX('s','sdsq',2)value
O:
selectINSTR('sdsq','s',2)valuefromdual
23.模糊子串的位置--返回2,参数去掉中间%则返回7
S:
selectpatindex('%d%q%','sdsfasdqe')value
O:
oracle没发现,但是instr可以通过第四霾问刂瞥鱿执问?
BR> selectINSTR('sdsfasdqe','sd',1,2)valuefromdual返回6
24.求子串
S:
selectsubstring('abcd',2,2)value
O:
selectsubstr('abcd',2,2)valuefromdual
25.子串代替返回aijklmnef
S:
SELECTSTUFF('abcdef',2,3,'ijklmn')value
O:
SELECTReplace('abcdef','bcd','ijklmn')valuefromdual
26.子串全部替换
S:
没发现
O:
selectTranslate('fasdbfasegas','fa','我')valuefromdual
27.长度
S:
len,datalength
O:
length
28.大小写转换lower,upper
29.单词首字母大写
S:
没发现
O:
selectINITCAP('abcddsafdf')valuefromdual
30.左补空格(LPAD的第一个参数为空格则同space函数)
S:
selectspace(10)+'abcd'value
O:
selectLPAD('abcd',14)valuefromdual
31.右补空格(RPAD的第一个参数为空格则同space函数)
S:
select'abcd'+space(10)value
O:
selectRPAD('abcd',14)valuefromdual
32.删除空格
S:
ltrim,rtrim
O:
ltrim,rtrim,trim
33.重复字符串
S:
selectREPLICATE('abcd',2)value
O:
没发现
34.发音相似性比较(这两个单词返回值一样,发音相同)
S:
SELECTSOUNDEX('Smith'),SOUNDEX('Smythe')
O:
SELECTSOUNDEX('Smith'),SOUNDEX('Smythe')fromdual
SQLServer中用SELECTDIFFERENCE('Smithers','Smythers')比较soundex的差
返回0-4,4为同音,1最高
------日期函数
35.系统
时间
S:
selectgetdate()value
O:
selectsysdatevaluefromdual
36.前后几日
直接与整数相加减
37.求日期
S:
selectconvert(char(10),getdate(),20)value
O:
selecttrunc(sysdate)valuefromdual
selectto_char(sysdate,'yyyy-mm-dd')valuefromdual
38.求时间
S:
selectconvert(