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指定的方 ......
1、启用远程连接
开始——所有程序——Microsoft SQL Server 2008——配置工具——SQL Server配置管理器
SQL Server NetWork Configuration中选择协议,"Named pipes"和"TCP/IP"都选择Enable,然后点击"TCP/IP"选属性,IP Address 选项卡,将所有的 TCP动态端口 的0全部去掉,在所有 TCP端口 后填写1433(默认端口号), 确定。
2、启动SQL Server Browser 服务
我的电脑——管理——服务和应用程序——服务——找出SQL Server Browser,启动该服务 ......
客户反映程序很慢,开始以为数据量大,在表中查询使用的字段上,添加了索引,没有明显的效果,检查时发现以前的同事在sql server中写的函数中使用了in,而在in的结果集中会有2500条记录左右,执行时间需要13秒。找到问题根源,
修改方法: 把in后面的子查询作为一个表和主表关联,添加限制条件。
原来写法: select * from a where a.id in (select bid from b)
修改后写法: select a.* from a, b where a.id=b.bid
修改后执行时间为1秒。
所以,在使用in的时候,一定要考虑后面的集合到底有多大。如果很大,尽量不要使用in。 ......
SQL日期时间不能早于1753年
1.公元元年的第一天,也就是公元1年1月1日,那天是星期六。
2.
现行的公历是格利戈里历法,这个历法并不是连续的,中间缺少了11天。1752年9月2日的后一天并不是9月3日,而是9月14日。也就是说,从1752年9月3日到9月13日的11天并不存在。
3.抹掉这11天是由英国议会在1752年做出的决定。(详情见如下
“历史的空白”
)
……
微软和Sybase两大公司决定不允许在各自数据库的日期型数据早于1753年
,如果想使用早于1753年的日期,就不能用日期型格式,得想别的法子。
---------------------------------------------------------------------------------------------------------
历史的空白:1582年10月5日至10月14日(英国:1752年9月3日至13日)
在现在通行的历法记载上,全世界居然有十天没有任何人出生过,也没有任何人死亡过,也没有发生过大大小小值得纪念的人或事。这就是1582年10月5日至10月14日
持续时间为0的一年是什么意思?
事实上,目前世界通行的公历中,就有持续时间为 ......
参考:http://gaowenjie7758.blog.163.com/blog/static/5946788920091116244306/
SQL存储过程中SELECT与SET 对变量赋值的区别
SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT。对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种方式还是有很多差别的。SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值。当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法。
下表列出 SET 与 SELECT 的区别。请特别注意红色部分。
set
select
同时对多个变量同时赋值
不支持
支持
表达式返回多个值时
出错
本人在2005中测试,也报错
表达式未返回值
变量被赋null值
本人在2005中测试,变量被赋null值
综上所述,set和select的区别在于,select支持同时对多个变量赋值,而set不支持
......
在很多编程语言中都有 for循环这样的东西。在数据库里面 替代他是 游标
但是游标使用起来是相当耗费资源的,今天看见一个CTE尝试了下他的用法
create table employewhere
(
id int identity(1,1),
[name] varchar(10),
[value] varchar(10),
[ttime] int
)
insert employewhere
select '张三',2,1
union all
select '张三',2,2
union all
select '张三',2,3
union all
select '张三',2,4
union all
select '李四',2,1
union all
select '李四',2,2
union all
select '李四',2,3
union all
select '李四',2,4
union all
select '李四',2,1
insert employewhere
select '王五',2,1
union all
select '王五',2,3
union all
select '王五',2,4
我想得到ttime为连续数字的name
张三
李四
select * from employewhere
1 张三 2 1
2 张三 2 2
3 张三 2 3
4 张三 2 4
5 李四 2 1
6 李四 2 2
7 李四 2 3
8 李四 2 4
9 王五 2 1
10 王五 2& ......