All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
分清SQL,Server中易混淆的数据类型_[SQL,Server教程]
在服务器上安装和使用MySQL的注意事项_php资料_编程技术
asp.net2.0网站语法之服务器端文件包含
正确理解PHP程序编译时的错误信息_php资料_编程技术
开发保留标准浏览器功能的AJAX应用程序_[AJAX教程]
小记存储过程中经常用到的本周,本月,本年函数_[SQL,Server教程]
Asp.net,字符串操作基类(安全,替换,分解等)_[Asp.Net教程]
轻松掌握Ajax.net系列教程一:部署AJAX.NET_[Asp.Net教程]
PHP Token(令牌)设计_[PHP教程]
C#文件处理技术:文件的写入使用方法
Reading number is top 10 pictures
Absolutely shocked. National geographic 50 animal photographys9
含苞欲放的素颜美少女3
Breasts woman big set 1
The real super beauty13
2012 national geographic daily picture2
西班牙山村小景2
A cat have life principles
Sora aoi possession of boudoir2
Fender Bender that so horrifying1
China's first snake village3
Download software ranking
Call Of Duty5
虚拟机5.5.3版
Boxer Classic video2
C语言教程TXT
Kung.Fu.Panda.2
C#COM编程指南
Sora aoi 120 minutes
Tram sex maniac 2 (H) rar bag4
金山office2007
Wild things 2
归海一刀 published in(发表于) 2014/2/1 0:15:19 Edit(编辑)
SQL中的时间计算语句_[SQL,Server教程]

SQL中的时间计算语句_[SQL,Server教程]

SQL中的时间计算语句_[SQL Server教程]

问:请问专家,如何计算一个表中的周起始和截止日期并写到表字段中? 我要从一个表向另一个表导入数据,并进行转换,用的是VB 。

  我现在有有一个表 主要字段有

time_id int
time_date datetime
year int
week_of_year int
day nvarhar

  想要转换成另外一张表

time_id int
time_date datetime
year int
week_of_year nvarchar

  原来的表内容是

--------------------
1 2003-07-09 2003 20 星期日
1 2003-07-10 2003 20 星期一
1 2003-07-11 2003 20 星期二


  想要变成

--------------------
1 07/09/2003 2003 第20周(7/9-7/17)
1 07/10/2003 2003 第20周(7/9-7/17)
1 07/11/2003 2003 第20周(7/9-7/17)

  请专家指点,这个语句应该怎么去写?


  答:
if object_id('tablename') is not null drop table tablename
select 1 as time_id, '2003-07-09' as time_date, 2003 as [year], 20 as week_of_year, '星期日' as [day]
into tablename
union select 1, '2003-07-10', 2003, 20, '星期一'
union select 1, '2003-07-11', 2003, 20, '星期二'
------------------------------------------------
select time_id, time_date, [year], '第' + cast(week_of_year as varchar(2)) + '周('
+ cast(month(week_begin) as varchar(2)) + '/' + cast(day(week_begin) as varchar(2)) + '-'
+ cast(month(week_end) as varchar(2)) + '/' + cast(day(week_end) as varchar(2)) as week_of_year
from (select *, dateadd(day, 1 - datepart(weekday, time_date), time_date) as week_begin,
dateadd(day, 7 - datepart(weekday, time_date), time_date) as week_end from tablename) a
/*
time_id time_date year week_of_year
1 2003-07-09 2003 第20周(7/6-7/12)
1 2003-07-10 2003 第20周(7/6-7/12)
1 2003-07-11 2003 第20周(7/6-7/12)
*/
------------------------------------------------
drop table tablename


问题虽然解决了,但这个例子并不具备通用性,还是个案,所以我们分析了你的代码,发现一个问题:日期范围是如何确定的?所以,我们把它延伸发散到:能否自主设定日期的范围呢?比如设定到星期一或星期天开始:



思路:
SET DATEFIRST
将一周的第一天设置为从 1 到 7 之间的一个数字。


语法
SET DATEFIRST { number | @number_var }


参数
number | @number_var


是一个整数,表示一周的第一天,可以是下列值中的一个。


值 一周的第一天是
1 星期一
2 星期二
3 星期三
4 星期四
5 星期五
6 星期六
7(默认值,美国英语) 星期日



注释
使用 @@DATEFIRST 函数检查 SET DATEFIRST 的当前设置。


SET DATEFIRST 的设置是在执行或运行时设置,而不是在分析时设置。



  方法一:



先创建一个用户函数,根据日期得到周开始日期和结束日期
create function getwstend(@resultdate datetime)
returns varchar(20)
As
begin
declare @weekstart datetime,@weekend datetime,@dayweek int,@weeknum int
set @weeknum = datepart(wk,@resultdate)
set @dayweek = datepart(dw,@resultdate)
begin
set @weekstart = dateadd(dd,1-@dayweek,@resultdate)
set @weekend = DateAdd(dd,7-@dayweek,@resultdate)
end
return '第'+Convert(varchar,@weeknum)+'周'+'('+right(convert(varchar(10),@weekstart,111),5)+'--'+right(Convert(varchar(10),@weekend,111),5)+')'
end
Go
例如:
select test.getwstend('2006-4-17')
返回结果是:第16周(04/16--04/22)
  利用这个函数相信就可以实现你的要求了,把所有表1中的数据转到表2


  方法二:


  为了避免数据的冗余,建议不要把数据从第一个表转到第二个表。因为这样会造成数据冗余。你可以在查询时候使用函数产生week_of_year nvarchar 这个栏位。


  方法三:



创建一个表,栏位为:
create table tw
(
time_date datetime,
week_of_year nvarchar
)
然后1910.1.1---2050.12.31之间的所有日期都产生一个对照的week_of_year nvarchar,方法也是使用上面创建的函数。然后查询的时候。只要两个表作关联就可以了
  如果原始表中的记录很多。而且日期有很多重复,我们更推荐使用方法三。







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.