当前位置:文档之家› sqlserver日期时间函数

sqlserver日期时间函数

sql server日期时间函数
Sql Server中的日期与时间函数
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,'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中,适合SQL初学者学习的SQL FAQ集锦
1. 行列转换--普通
假设有张学生成绩表(CJ)如下:
Name Subject Result
张三语文80
张三数学90
张三物理85
李四语文85
李四数学92
李四物理82
想变成
姓名语文数学物理
张三809085
李四859282
declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)
2. 行列转换--合并
有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1,2,3
2 1,2
3 1
创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str='
select @str=@str+','+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1)
return(@str)
End
go
--调用自定义函数得到结果
select distinct id,dbo.fmerg(id) from 表A
3. 如何取得一个数据表的所有列名
方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLU MN表中取得该数据表的所有列名。

SQL语句如下:
declare @objid int,@objname char(40)
set @objname = 'tablename'
select @objid = id from sysobjects
where id = object_id(@objname)
select 'Column_name' = name from syscolumns
where id = @objid order by colid
4. 通过SQL语句来更改用户的密码
修改别人的,需要sysadmin role
EXEC sp_password NULL,'newpassword','User'
如果帐号为SA执行EXEC sp_password NULL,'newpassword',sa
5. 怎么判断出一个表的哪些字段不允许为空?
select COLUMN_NAME from INFORMATION_SCHEMA.
COLUMNS where IS_NULLABLE='NO'and TABLE_NAME=tablename
6. 如何在数据库里找到含有相同字段的表?
a. 查已知列名的情况
SELECT as TableName, as columnname
From syscolumns a INNER JOIN sysobjects b
ON a.id=b.id
AND b.type='U'
AND ='你的字段名字'
b. 未知列名查所有在不同表出现过的列名
Select As tablename, As columnname From syscolumns s1, sysobjects o
Where s1.id = o.id
And o.type = 'U'
And Exists (
Select 1 From syscolumns s2
Where =
And s1.id <> s2.id
)
7. 查询第xxx行数据
假设id是主键:
select*
from(select top xxx*from yourtable)aa
where not exists(select1from(select top xxx-1* from yourtable)bb where aa.id=bb.id)
如果使用游标也是可以的
fetch absolute[number]from[cursor_name]
行数为绝对行数
8. SQL Server日期计算
a. 一个月的第一天
SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
b. 本周的星期一
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
c. 一年的第一天
SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)
d. 季度的第一天
SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)
e. 上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0)) f. 去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
g. 本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)) h. 本月的第一个星期一
select DATEADD(wk,DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())),0)
i. 本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))。

相关主题