??xml version="1.0" encoding="utf-8" standalone="yes"?> 1. 当前pȝ日期、时?nbsp; 2. dateadd 在向指定日期加上一D|间的基础上,q回新的 datetime ?br />
例如Q向日期加上2?br />
select dateadd(day,2,'2004-10-15') --q回Q?004-10-17 00:00:00.000 3. datediff q回跨两个指定日期的日期和时间边界数?br />
select datediff(day,'2004-09-01','2004-09-18') --q回Q?7 4. datepart q回代表指定日期的指定日期部分的整数?br />
select datepart(month, '2004-10-15') --q回 10 5. datename q回代表指定日期的指定日期部分的字符?br />
select datename(weekday, '2004-10-15') --q回Q星期五 6. day(), month(),year() --可以与datepart对照一?/p>
select 当前日期=convert(varchar(10),getdate(),120), 当前旉=convert(varchar(8),getdate(),114) select datename(dw,'2004-10-15') select 本年W多周=datename(week,'2004-10-15'), 今天是周?datename(weekday,'2004-10-15')
表示是A表有,B表没有的数据.
]]>
]]>
select * from 一?where CarNO in (select CarNO from 总表)
select q锁.*,总表.ZBStoreName from q锁,总表 where q锁.CarNO =总表.CarNO and q锁.ClintName=总表.ClintName order by q锁.LSStoreName,总表.ZBStoreName
select * from l修 where CarNO in (select CarNO from 总表)
]]>
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
2.本周的星期一
Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
3.一q的W一?br />
Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
4.季度的第一?br />
Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
5.当天的半?br />
Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
6.上个月的最后一?br />
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
7.d的最后一?br />
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
8.本月的最后一?br />
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
9.本年的最后一?br />
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
10.本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
q回当前日期和时?br />
通过函数GETDATEQ)Q你可以获得当前?strong style="color: black; background-color: #a0ffff">日期和时间。函数GETDATEQ)可以用来作ؓ(f)DATEDIME型字D늚~省倹{这Ҏ(gu)入记录时保存当时的时间是有用的。要建立一个表Q其中的记录包含有当前的日期和时_(d)可以d一个DATETIME型字D,指定其缺省gؓ(f)函数GETDATEQ)的返回|pq样Q?br />
Create TABLE site_log (
username VARCHAR(40)Q?br />
useractivity VARCHAR(100)Q?br />
entrydate DATETIME DEFAULT GETDATE())
转换日期和时?br />
函数GETDATEQ)的返回值在昄时只昄到秒。实际上Q?strong style="color: black; background-color: #ffff66">SQL Sever内部旉可以_到毫UQ确切地_(d)可以_?.33毫秒Q?br />
要得C同格式的日期和时_(d)你需要用函数CONVERTQ)。例如,当下面的q个语句执行Ӟ昄的时间将包括毫秒Q?br />
Select CONVERT(VARCHAR(30)QGETDATE()Q?)
注意例子中数?的用。这个数字指明了在显C?strong style="color: black; background-color: #a0ffff">日期和时间时使用哪种日期和时间格式。当q个语句执行Ӟ显C如下的日期和时_(d)(x)
Nov 30 1997 3:29:55:170AM
(1 row(s) affected)
在函数CONVERTQ)中你可以使用许多U不同风格的日期和时间格式。下表显CZ所有的格式?br />
日期和时间的cdQ?br />
cd?标准 输出
0 Default mon dd yyyy hh:miAM
1 USA mm/dd/yy
2 ANSI yy.mm.dd
3 British/French dd/mm/yy
4 German dd.mm.yy
5 Italian dd-mm-yy
6 - dd mon yy
7 - mon ddQyy
8 - hh:mi:ss
9 Default + milliseconds--mon dd yyyy
hh:mi:ss:mmmAM(or )
10 USA mm-dd-yy
11 JAPAN yy/mm/dd
12 ISO yymmdd
13 Europe Default + milliseconds--dd mon yyyy
hh:mi:ss:mmm(24h)
14 - hh:mi:ss:mmm(24h)
cd0Q?Q和13Lq回四位的年。对其它cdQ要昄世纪Q把style值加?00。类?3?4q回24时旉的时间。类?Q?Q和13q回的月份用三位字符表示Q用Nov代表NovemberQ?
对表中所列的每一U格式,你可以把cd值加?00来显C有世纪的年Q例如,00q将昄?000q_(d)。例如,要按日本标准昄日期Q包括世U,你应使用如下的语句:(x)
Select CONVERTQVARCHARQ?0Q,GETDATEQ)Q?11Q?br />
在这个例子中Q函数CONVERTQ)?strong style="color: black; background-color: #a0ffff">日期格式q行转换Q显CZؓ(f)1997/11/30
抽取日期和时?br />
在许多情况下Q你也许只想得到日期和时间的一部分Q而不是完整的日期和时间。ؓ(f)了抽?strong style="color: black; background-color: #a0ffff">日期的特定部分,你可以用函数DATEPARTQ)Q象q样Q?br />
Select site_name ‘Site Name’Q?br />
DATEPART(mmQsite_entrydate) ‘Month Posted’ FROM site_directory
函数DATEPARTQ)的参数是两个变量。第一个变量指定要抽取日期的哪一部分Q第二个变量是实际的数据。在q个例子中,函数DATEPARTQ)抽取月䆾Q因为mm代表月䆾。下面是q个Select 语句的输出结果:(x)
Site Name Month Posted
………………………………………………………………
Yahoo 2
Microsoft 5
Magicw3 5
(3 row(s) affected)
Month Posted列显CZ每个站点被查询的月䆾。函数DATEPARTQ)的返回值是一个整数。你可以用这个函数抽?strong style="color: black; background-color: #a0ffff">日期的各个不同部分,如下表所C?br />
日期的各部分及其?br />
日期部分 ??br />
year yy 1753--9999
quarter qq 1--4
month mm 1--12
day of year dy 1--366
day dd 1--31
week wk 1--53
weekday dw 1--7(Sunday--Saturday)
hour hh 0--23
minute mi 0--59
second ss 0--59
milisecond ms 0--999
当你需要进?strong style="color: black; background-color: #a0ffff">日期和时间的比较Ӟ使用函数DATEPARTQ)q回整数是有用的。但是,上例中的查询l果Q?Q?Q不是十分易诅R要以更易读的格式得到部分的日期和时_(d)你可以用函数DATENAMEQ)Q如下例所C:(x)
Select site_name ‘Site Name’
DATENAME(mmQsite_entrydate) ‘Month Posted’
FROM site_directory
函数DATENAMEQ)和函数DATEPARTQ)接收同样的参数。但是,它的q回值是一个字W串Q而不是一个整数。下面是上例该用DATENAMEQ)得到的结果:(x)
Site Name Month Postec
………………………………………………………………….
Yahoo February
Microsoft June
Magicw3 June
(3 row(s) affected)
你也可以用函数DATENAEQ)来抽取一个星期中的某一天。下面的q个例子同时抽取一周中的某一天和日期中的月䆾Q?br />
Select site_name ‘Site Name’Q?br />
DATENAME(dwQsite_entrydate)+ ‘-’ + DATENAMEQmmQsite_entrydateQ?br />
‘Day and Month Posted’ FORM site_directory
q个例子执行Ӟ返回如下的l果Q?br />
Site Name Day and Month Posted
………………………………………………………………………
Yahoo Friday - February
Microsoft Tuesday - June
Magicw3 Monday - June
(3 row(s) affected)
q回日期和时间范?br />
当你分析表中的数据时Q你也许希望取出某个特定旉的数据。你也许对特定的某一天中――比如说2000q?2?5日――访问者在你站点上的活动感兴趣。要取出q种cd的数据,你也怼(x)试图使用q样的Select语句Q?br />
Select * FROM weblog Where entrydate="12/25/20000"
不要q样做。这个Select语句不会(x)q回正确的记录――它?yu)只q回日期和时间是12/25/2000 12:00:00:000AM的记录。换句话_(d)只有刚好在午夜零点输入的记录才被q回?br />
问题?strong style="color: black; background-color: #ffff66">SQL Sever用完整?strong style="color: black; background-color: #a0ffff">日期和时间代曉K?strong style="color: black; background-color: #a0ffff">日期和时间。例如,当你输入一?strong style="color: black; background-color: #a0ffff">日期Q但不输入时间时Q?strong style="color: black; background-color: #ffff66">SQL Sever加上缺省的旉“12Q?0Q?0Q?00AM”。当你输入一个时_(d)但不输入日期ӞSQL Sever加上缺省的日期“Jan 1 1900”?br />
要返回正的记录Q你需要适用日期和时间范围。有不止一U途径可以做到q一炏V例如,下面的这个Select 语句能q回正确的记录:(x)
Select * FROM weblog
Where entrydate>=”12/25/2000” AND entrydate<”12/26/2000”
q个语句可以完成dQ因为它选取的是表中?strong style="color: black; background-color: #a0ffff">日期和时间大于等?2/25/2000 12:00:00:000AMq小?2/26/2000 12:00:00:000AM的记录。换句话_(d)它将正确地返?000q圣诞节q一天输入的每一条记录?br />
另一U方法是Q你可以使用LIKE来返回正的记录。通过?strong style="color: black; background-color: #a0ffff">日期表达式中包含通配W?#8220;Q?#8221;Q你可以匚w一个特?strong style="color: black; background-color: #a0ffff">日期的所有时间。这里有一个例子:(x)
Select * FROM weblog Where entrydate LIKE ‘Dec 25 2000%’
q个语句可以匚w正确的记录。因为通配W?#8220;Q?#8221;代表了Q何时间?br />
使用q两U匹?strong style="color: black; background-color: #a0ffff">日期和时间范围的函数Q你可以选择某个月,某一天,某一q_(d)某个时Q某一分钟Q某一U,甚至某一毫秒内输入的记录。但是,如果你用LIKE 来匹配秒或毫U,你首先需要用函数CONVERTQ)?strong style="color: black; background-color: #a0ffff">日期和时间{换ؓ(f)更精的格式Q参见前?#8220;转换日期和时?#8221;一节)?br />
比较日期和时?br />
最后,q有两个日期和时间函数对Ҏ(gu)日期和时间取录是有用的。用函数DATEADDQ)和DATEDIFFQ)Q你可以比较日期的早晚。例如,下面的Select语句显C中的每一条记录已l输入了多少个小Ӟ(x)
Select entrydate ‘Time Entered’
DATEDIFF(hhQentrydateQGETDATE()) ‘Hours Ago’ FROM weblog
如果当前旉?000q?1?0号下??5分,则会(x)q回如下的结果:(x)
Time Entered Hours Ago
…………………………………………………..
Dec 30 2000 4:09PM 2
Dec 30 2000 4:13PM 2
Dec 1 2000 4:09PM 698
(3 row(s) affected)
函数DADEDIFFQ)的参数是三个变量。第个变量指?strong style="color: black; background-color: #a0ffff">日期的某一部分。在q个例子中,是按时?strong style="color: black; background-color: #a0ffff">日期q行比较Q(要了?strong style="color: black; background-color: #a0ffff">日期各部分的详细内容Q请参考表11.2Q在日期2000q?1?日和2000q?1?0日的指定旉之间?89个小时。另外两个参数是要进行比较的旉。ؓ(f)了返回一个正敎ͼ较早的时间应该先l?br />
函数DATEADDQ)把两?strong style="color: black; background-color: #a0ffff">日期相加。当你需要计截?strong style="color: black; background-color: #a0ffff">日期q一cȝ数据Ӟq个函数是有用处的。假如你要查询一个月前注册用L(fng)记录Q你可以使用如下的Select语句Q?br />
Select username ‘User Name’Q?br />
DATEADD(mmQ?Qfirstvisit_date) ‘Registration Expires’
FROM registration_table
函数DATEADDQ)的参数有三个变量。第一个变量代?strong style="color: black; background-color: #a0ffff">日期的某一部分Q这个例子用C代表月䆾的mm。第二个变量指定了时间的间隔――在本例中是一个月。最后一个变量是一?strong style="color: black; background-color: #a0ffff">日期Q在q个例子中,日期是取自DATETIME型字Dfirstvisit_date.假设当前日期是June 30Q?000Q这个语句将q回如下的内容:(x)
User Name Registration Expires
……………………………………………………………………………
Bill Gates Jul 30 2000 4:09PM
President Clinton Jul 30 2000 4:13PM
William Shakespeare Jul 1 2000 4:09PM
(3 row(s) affected)
注意Q?br />
使用函数DATEADDQ)把一?strong style="color: black; background-color: #a0ffff">日期加上一个月Q它q不加上30天。这个函数只单地把月份值加1?nbsp;
select getdate()
函数
参数/功能
GetDate( )
q回pȝ目前?strong style="color: black; background-color: #a0ffff">日期与时?/td>
DateDiff (interval,date1,date2)
以interval 指定的方式,q回date2 与date1两个日期之间的差?date2-date1
DateAdd (interval,number,date)
以interval指定的方式,加上number之后?strong style="color: black; background-color: #a0ffff">日期
DatePart (interval,date)
q回日期date中,interval指定部分所对应的整数?/td>
DateName (interval,date)
q回日期date中,interval指定部分所对应的字W串名称
参数 interval的设定值如下:(x)
?/strong>
~?写(Sql ServerQ?/strong>
Access ?ASP
说明
Year
Yy
yyyy
q?1753 ~ 9999
Quarter
Qq
q
?1 ~ 4
Month
Mm
m
? ~ 12
Day of year
Dy
y
一q的日数,一q中的第几日 1-366
Day
Dd
d
日,1-31
Weekday
Dw
w
一周的日数Q一周中的第几日 1-7
Week
Wk
ww
周,一q中的第几周 0 ~ 51
Hour
Hh
h
? ~ 23
Minute
Mi
n
分钟0 ~ 59
Second
Ss
s
U?0 ~ 59
Millisecond
Ms
-
毫秒 0 ~ 999
]]>
Ҏ(gu)两表中区分的数据q提?br />
select * from B where checksum(*) not in (select checksum(*) from A)
select * from kehu where checksum(车牌) not in (select checksum(车牌) from member) and checksum(客户名称)
表示是A表有,B表没有的数据.
select id,age,Fullname from tableOne a
where a.id!=(select max(id) from tableOne b where a.age=b.age and a.FullName=b.FullName)
=========================================
delete from dbo.Schedule where
RoomID=29 and StartTime>'2005-08-08' and EndTime<'2006-09-01' and Remark like 'preset' and UserID=107
and (
(ScheduleID>=3177 and ScheduleID<=3202 )
or (ScheduleID>=3229 and ScheduleID<=3254)
or (ScheduleID>=3307 and ScheduleID<=3332)
=========================================
delete tableOne
where tableOne.id!=(select max(id) from tableOne b where tableOne.age=b.age and tableOne.FullName=b.FullName);
==========================================
DataClient 12/23/2005 5:03:38 PM
select top 5
DOC_MAIN.CURRENT_VERSION_NO as Version, DOC_MAIN.MODIFY_DATE as ModifyDT, DOC_MAIN.SUMMARY as Summary, DOC_MAIN.AUTHOR_EMPLOYEE_NAME as AuthorName, DOC_MAIN.TITLE as Title, DOC_MAIN.DOCUMENT_ID as DocumentID, Attribute.ATTRIBUTE_ID as AttributeId, Attribute.CATALOG_ID as CatalogId, DOC_STATISTIC.VISITE_TIMES as VisiteTimes, DOC_STATISTIC.DOCUMENT_ID as DocumentID2
from DOC_MAIN DOC_MAIN
Inner join CATALOG_SELF_ATTRIBUTE Attribute on DOC_MAIN.CATALOG_ID=Attribute.CATALOG_ID
Left join DOC_STATISTIC DOC_STATISTIC on DOC_MAIN.DOCUMENT_ID=DOC_STATISTIC.DOCUMENT_ID
where (DOC_MAIN.AUTHOR_EMPLOYEE_ID = 1) and (Attribute.ATTRIBUTE_ID = 11)
order by VisiteTimes DESC
====================================
select top 1 DOCUMENT_ID,EMPLOYEE_NAME,COMMENT_DATE,COMMENT_VALUE
from dbo.DOC_COMMENT
where DOCUMENT_ID=19 and COMMENT_DATE = (select max(COMMENT_DATE) from DOC_COMMENT where DOCUMENT_ID=19)
====================================
select TITLE, (select top 1 EMPLOYEE_NAME
from dbo.DOC_COMMENT where DOCUMENT_ID=19) Commentman,
(select top 1 COMMENT_DATE
from dbo.DOC_COMMENT where DOCUMENT_ID=19) COMMENT_DATE
from DOC_MAIN where DOCUMENT_ID=19
======================================
alter view ExpertDocTopComment
as
select DOCUMENT_ID, max(ORDER_NUMBER ) as lastednum
from dbo.DOC_COMMENT
group by DOCUMENT_ID
go
alter view ExpertDocView
as
select TITLE , a.AUTHOR_EMPLOYEE_ID , c.EMPLOYEE_NAME , c.COMMENT_DATE
from dbo.DOC_MAIN a
left join
ExpertDocTopComment b
on
a.DOCUMENT_ID = b.DOCUMENT_ID
inner join
DOC_COMMENT c
on
b.DOCUMENT_ID = c.DOCUMENT_ID and
b.lastednum = c. ORDER_NUMBER
======================================
select a.Id ,a.WindowsUsername ,
0 , 1 ,
a.Email ,
case b.EnFirstName when null then a.Username else b.EnFirstName end,
case b.EnLastName when null then a.Username else b.EnLastName end
from UUMS_KM.dbo.UUMS_User a
left join
UUMS_KM.dbo.HR_Employee b
on
a. HR_EmployeeId = b.id
=====================================
列出上传文档最多的五个人的ID
select AUTHOR_EMPLOYEE_ID,count(AUTHOR_EMPLOYEE_ID)
from dbo.DOC_MAIN
group by AUTHOR_EMPLOYEE_ID
order by count(AUTHOR_EMPLOYEE_ID)
2719 2
6 9
12 30
1 116
列出上传文档最多的五个人的信息
select distinct AUTHOR_EMPLOYEE_ID ,AUTHOR_EMPLOYEE_NAME
from dbo.DOC_MAIN
where AUTHOR_EMPLOYEE_ID
in (
select top 5 AUTHOR_EMPLOYEE_ID
from dbo.DOC_MAIN
group by AUTHOR_EMPLOYEE_ID
order by count(AUTHOR_EMPLOYEE_ID)
)
=================================