时间长度SQL语句.docx
- 文档编号:23301643
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:18
- 大小:22.56KB
时间长度SQL语句.docx
《时间长度SQL语句.docx》由会员分享,可在线阅读,更多相关《时间长度SQL语句.docx(18页珍藏版)》请在冰豆网上搜索。
时间长度SQL语句
sql日期语句大全
--本周第一天
selectdateadd(day,1-(datepart(weekday,getdate())+@@datefirst-1)%7,getdate())--or
selectdateadd(wk,datediff(wk,0,getdate()),0)
--本周第一天
selectdateadd(wk,datediff(wk,0,getdate()),6)
--上月第一天
select
convert(char(10),dateadd(month,-1,dateadd(dd,-day(getdate())+1,getdate())),111)--上月最后一天
selectconvert(char(10),dateadd(ms,-3,dateadd(mm,datediff(mm,0,getdate()),0)),111)+23:
59:
59
--本月第一天
selectdateadd(dd,-datepart(dd,getdate())+1,getdate())
--本月最后一天
selectdateadd(dd,-datepart(dd,getdate()),dateadd(mm,1,getdate()))
--本月天数
selectdatediff(dd,dateadd(dd,-datepart(dd,getdate())+1,getdate()),dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate())))
--or
selectdatepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(getdate())asvarchar)+-+cast(month(getdate())asvarchar)+-01asdatetime))))
--下月第一天
selectdateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate()))
--下月最后一天
selectconvert(char(10),dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+2,0)),111)+23:
59:
59
--季度第一天
--季度最后一天(直接推算法)
select
dateadd(day,-1,convert(char(8),dateadd(month,1+datepart(quarter,getdate())*3-month(getdate()),getdate()),120)+1)
--季度的最后一天(case判断法)
selectdateadd(month,datepart(quarter,getdate())*3-month(getdate()),getdate())
--本月第一个星期一
selectdateadd(wk,datediff(wk,,dateadd(dd,6-day(getdate()),getdate())),)--去年最后一天
selectdateadd(ms,-3,dateadd(yy,datediff(yy,0,getdate()),0))
--今年第一天
selectdateadd(yy,datediff(yy,0,getdate()),0)
--今年最后一天
selectdateadd(ms,-3,dateadd(yy,datediff(yy,0,getdate())+1,0))
--指定日期所在周的任意一天
selectdateadd(day,@number-datepart(weekday,@dt),@dt)--5.指定日期所在周的任意星期几
--a.星期天做为一周的第1天
selectdateadd(day,@number-(datepart(weekday,@dt)+@@datefirst-1)%7,@dt)--b.星期一做为一周的第1天
selectdateadd(day,@number-(datepart(weekday,@dt)+@@datefirst-2)%7-1,@dt)---周内的第几日
selectdatepart(weekday,getdate())as周内的第几日
--年内的第几周
selectdatepart(week,getdate())as年内的第几周
--年内的第几季
selectdatepart(quarter,getdate())as年内的第几季
--判断某天是当月的第几周的sql函数
createfunctionweekofmonth(@daydatetime)
returnsint
as
begin
----declare@daydatetime
declare@numint
declare@startdatetime
declare@ddint
declare@dayofweekchar(8)
declare@dayofweek_numchar(8)
declare@startweekdaysint
---set@day=2009-07-05
ifdatepart(dd,@day)=1
return1
else
set@start=(selectdateadd(mm,datediff(mm,0,@day),0))--一个月第一天的set@dayofweek=(datename(weekday,@start))---得到本月第一天是周几
set@dayofweek_num=(select(case@dayofweekwhen星期一then2
when星期二then3
when星期三then4
when星期四then5
when星期五then6
when星期六then7
when星期日then1
end))
set@dayofweek_num=7-@dayofweek_num+1---得到本月的第一周一共有几天---print@dayofweek_num
set@dd=datepart(dd,@day)----得到今天是这个月的第几天
--print@dd
if@dd<=@dayofweek_num--小于前一周的天数
return1
else
set@dd=@dd-@dayofweek_num
if@dd%7=0
begin
set@num=@dd/7
return@num+1
end
else--if@dd%7<>0
set@num=@dd/7
set@num=@num+1+1
return@num
end
--常用日期的视图
selectconvert(varchar(10),getdate(),120)astoday,replace(convert(varchar(8),getdate(),108),:
)astime,
replace(replace(replace(convert(varchar,getdate(),120),-,),,),:
)asall_date,convert(varchar(12),getdate(),112)asdate,
year(getdate())asyear,month(getdate())asmonth,day(getdate())asday,convert(varchar(8),dateadd(d,-1,getdate()),112)
asyestaday,convert(varchar(8),dateadd(d,1,getdate()),112)astomorrow
from
/*
t-sql:
17个与日期时间相关的自定义函数(udf),周日作为周的最后一天,均不受@@datefirst、语言版本影响
提示:
(@@datefirst+datepart(weekday,@date))%7判断周几是最保险的!
与@@datefirst无关,与语言版本无关
@@datefirst可能会导致datepart(weekday,@date)不一样!
无论@@datefirst等于几,无论是什么语言版本的sqlserver下面永远恒成立!
(@@datefirst+datepart(weekday,@date))%7:
2、3、4、5、6、0、1分别代表周一到周日
--*/
createfunctionudf_getage(@startdatedatetime,@enddatedatetime)
returnsinteger
--返回精确年龄selectdbo.udf_getage(1949-10-01,getdate())
begin
returndatediff(year,@startdate,@enddate)
-casewhendatediff(day,dateadd(year,datediff(year,@startdate,@enddate),@startdate),@enddate)>=0then0
else
1
end
end
go
createfunctionudf_daysofyearbydate(@datedatetime)
returnsinteger
--返回年的天数可判断平(365)、润(366)年
begin
returndatediff(day,dateadd(year,datediff(year,0,@date),0),dateadd(year,datediff(year,0,@date)+1,0))
end
go
createfunctionudf_daysofyear(@yearinteger)
returnsinteger
--返回年的天数可判断平(365)、润(366)年
begin
returndatediff(day,dateadd(year,@year-year(0),0),dateadd(year,@year-year(0)+1,0))end
go
createfunctionudf_halfday(@datedatetime)
returnsdatetime
--返回@date是上午返回@date的零点,@date是下午返回@date的十二点begin
returncasewhendatepart(hour,@date)<12
thendateadd(day,datediff(day,0,@date),0)--上午归到零点else
dateadd(hour,12,dateadd(day,datediff(day,0,@date),0))--下午归到十二点
end
end
go
createfunctionudf_weekdiff(@startdatedatetime,@enddatedatetime)
returnsinteger
--返回[@startdate,@enddate]之间周数周日是当周的最后一天
begin
returndatediff(week,@startdate,@enddate)--+1
+casewhen(@@datefirst+datepart(weekday,@startdate))%7=1
then1
else
end
-casewhen(@@datefirst+datepart(weekday,@enddate))%7=1
then1
else0
end
end
go
createfunctionudf_weekofmonth(@datedatetime)
--返回@date是所在月的第几周周日是当周的最后一天
returnsinteger
begin
returndatediff(week
casewhen(@@datefirst+datepart(weekday,dateadd(month,datediff(month,0,@date),0)))%7=1
thendateadd(month,datediff(month,0,@date),0)-1else
dateadd(month,datediff(month,0,@date),0)
end
casewhen(@@datefirst+datepart(weekday,@date))%7=1
then@date-1
else@date
)
end
--流水号编码方式
--现实生活中的流水帐号的格式有五花八门,本来主要探讨一种比较普遍的格式2位字符串+4位年月日期+4位递增数字(如ma2009090001),其他格式都不是问题。
declare@seriallongint,@iint,@objlengint篇二:
sql语句大全
sql语句大全
创建数据库
创建之前判断该数据库是否存在
ifexists(select*fromsysdatabaseswherename=databasename)dropdatabasedatabasename
go
createdatabasedatabasename
删除数据库
dropdatabasedatabasename
备份sqlserver
---创建备份数据的device
usemaster
execsp_addumpdevicedisk,testback,c:
\mssql7backup\mynwind_1.dat---开始备份
backupdatabasepubstotestback
创建新表
createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)根据已有的表创建新表:
a:
go
use原数据库名
go
select*into目的数据库名.dbo.目的表名from原表名(使用旧表创建新表)b:
createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly创建序列
createsequencesimon_sequence
minvalue1--最小值
maxvalue999999999999999999999999999--最大值
startwith1--开始值
incrementby1--每次加几
cache20;
删除新表
droptabletabname
增加一个列
altertabletabnameaddcolnamecoltype
删除一个列
altertabletabnamedropcolumncolname
添加主键
altertabletabnameaddprimarykey(col)
说明:
删除主键:
altertabletabnamedropprimarykey(col)
创建索引
create[unique]indexidxnameontabname(col…。
)
删除索引:
dropindexidxnameontabname
注:
索引是不可更改的,想更改必须删除重新建。
创建视图
createviewviewnameasselectstatement
删除视图:
dropviewviewname
简单基本的sql语句
(1)数据记录筛选:
sql=select*from数据表where=字段值orderby[desc]
sql=select*from数据表where字段名like%字段值%orderby字段名
[desc]
sql=selecttop10*from数据表where字段名=字段值orderby字段名[desc]sql=selecttop10*from数据表orderby字段名[desc]
sql=select*from数据表where字段名in(值1,值2,值3)
sql=select*from数据表where字段名between值1and值2
(2)更新数据记录:
sql=update数据表set字段名=字段值where条件表达式
sql=update数据表set字段1=值1,字段2=值2……字段n=值nwhere条件表达式
(3)删除数据记录:
sql=deletefrom数据表where条件表达式
sql=deletefrom数据表(将数据表所有记录删除)
(4)添加数据记录:
sql=insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)
sql=insertinto目标数据表select*from源数据表(把源数据表的记录添加到目标数据表)
(5)数据记录统计函数:
avg()得出一个表格栏平均值
count(*;)对数据行数的统计或对某一栏有值的数据行数统计
max()取得一个表格栏最大的值
min()取得一个表格栏最小的值
sum()把数据栏的值相加
引用以上函数的方法:
sql=selectsum()as别名from数据表where条件表达式
setrs=conn.excute(sql)
用rs(别名)获取统计的值,其它函数运用同上。
查询去除重复值:
selectdistinct*fromtable1
(5)数据表的建立和删除:
createtable数据表名称(字段1类型1(长度),字段2类型2(长度)……)
(6)单列求和:
selectsum()from数据表
编辑本段最新sql语句
查询数据库中含有同一这字段的表:
selectnamefromsysobjectswherextype=uandidin(selectidfromsyscolumnswherename=s3)
根据出生日期可以算出年龄:
selectdatediff(year,scrq,2013)as年龄frompage_shsjgrgl
根据当前年份自动算出年龄
selectdatediff(year,csny,cast(year(getdate())aschar))
年
selectyear(djsj)frompage_shsjgrgl
月
selectmonth(djsj)frompage_shsjgrgl
日
selectday(djsj)frompage_shsjgrgl
在同一数据库中复制表结构:
select*intoafrombwhere1<>1
当identity_insert设置为off时,不能为表aa中的标识列插入显式值。
setidentity_insertaaon----设置打开,
批量插入:
insertintoaa(customer_id,id_type,id_number)selectcustomer_id,id_type,id_numberfromtcustomer;
setidentity_insertaaoff---关闭
不同数据库之间的复制:
复制结构:
select*intotest.dbo.bfromgcrt.dbo.page_shsjgrglwhere1<>1
复制内容:
insertintotest.dbo.b(xm,ssdq)selectxm,ssdqfromgcrt.dbo.page_shsjgrgl
查看数据库中所有的数据表表名:
selectnamefromsysobjectswheretype=u
查看数据库中所有表含有同一字段的表:
selectnamefromsysobjectswherextype=uandidin(selectidfromsyscolumnswherename=同一字段)
查看数据表中的所有字段:
selectnamefromsyscolumnswhereid=object_id(表名)
查询数据库时随机10条记录:
selecttop10*fromtd_areacodeorderbynewid()
修改字段类型:
altertable表名altercolumn字段名varchar(30)notnull
usezhjiangjgyl
declare@tempnvarchar(30)
set@temp=zwi4
selecthllxfrompage_yljg_zyrywherehllxnotin(
select
case@tempwhen
then
elseb1end
from(
select*fromtd_codewherepage_en=page_yljg_zyry
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时间 长度 SQL 语句