Sql server SQL中的时间计算语句

问:请问专家,如何计算一个表中的周起始和截止日期并写到表字段中?我要从一个表向另一个表导入数据,并进行转换,用的是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 的设置是在执行或运行时设置,而不是在分析时设置。

时间: 2024-11-08 22:10:10

Sql server SQL中的时间计算语句的相关文章

查看sql server 2008中性能低下的语句

经常使用这个语句来查看性能低下的sql语句: SELECT creation_time  N'语句编译 时间'        ,last_execution_time  N'上次执行时间 '        ,total_physical_reads N'物理读取总次数'        ,total_logical_reads/execution_count N'每次逻辑读次数 '        ,total_logical_reads  N'逻辑读取总次数 '        ,total_log

在SQL SERVER 2005中实现素数计算

我将提出一个挑战,谁能用SQLSEERVER提出计算素数最好的方法,我用了一个新的特点CTE和某些TSQL实现,但均不理想,前者(CTE)有限制,而后者(TSQL)产生一百万个素数用了7分种你可以干的更好么?这儿是我的一些代码段落 (TSQL实现) set nocount ondeclare @prime table (prime int not null primary key)--insert into @prime values (2)--insert into @prime values

SQL Server 2005 中的批编译、重新编译和计划缓存问题(2)

查询计划缓存及各种 SET 选项(与 showplan 相关及其他) 各种 SET 选项--多数与 showplan 相关--以多种复杂的方式影响着查询计划和执行上下文的编译.缓存和重用.下表汇总了相关的详细信息. 应按如下顺序阅读该表中的内容.批处理通过表中第一列所指定的特定模式提交给 SQL Server.已提交的批处理的计划缓存中可能存在.也可能不存在已缓存的查询计划.第 2 列和第 3 列描述了存在已缓存的查询计划时的情况:第 4 列和第 5 列说明了不存在已缓存的查询计划时的情况.在每

SQL Server 2008中新的日期时间数据类型

SQL Server 2008 终于发布新版了,虽然还只是另一个社区测试版而非完全版.每当新软件发布,大 家最关系的问得最多的问题就是:有些什么新特性?SQL Server 2008有很多新功能和新工具.不过,本文 还是主要为大家介绍SQL Server 2008七月预览版引入的新数据类型,并对DATETIME数据类型的功能进行 专门讨论. SQL Server 2008中DATETIME功能的最大转变就是引入了四种DATETIME数据类型,分别为 DATE.TIME.DATETIMEOFFSE

comBox绑定SQL Server数据库中时间字段中的不重复的年份

  关于comBox绑定SQL Server数据库中时间字段中的不重复的年份如下: private void Education_Training_Load(object sender, EventArgs e) { MyDBase DB = new MyDBase(DBUser.sserver, DBUser.DBName, DBUser.suser, DBUser.spasswd); DataSet DS = DB.GetRecordset("select distinct (year(da

sql server 2005中如何用语句查看 人员表 中每个人的电子邮箱域名?

问题描述 sql server 2005中如何用语句查看 人员表 中每个人的电子邮箱域名? sql server 2005中如何用语句查看 人员表 中每个人的电子邮箱域名?老师说方法有很多,然而刚开始学习数据库的小弟我并不知道,敬请大神们指点 解决方案 楼主问的问题应该是这样的,qqqq@126.com 查询结果是 126.com 可以试一下下面的方法select substring(email_address charindex('@'email_address1)+1len(email_ad

Sql server 数据库中,纯SQL语句查询、执行 单引号问题。

原文:Sql server 数据库中,纯SQL语句查询.执行 单引号问题. 在默认值情况下, select 'abc',Titile from tb_Name;  ---输出内容 是abc: 如果想输出 单引号 'abc,需要使用select '''abc',Titile from tb_Name; ---这里用三个单引号'''abc: select '''abc''',Title from tbName;   输出内容是'abc':两边带有单引号: 谨记:如果字符串包含单引号,则需要在单引号前

sql语句-有关SQL Server 库中Left Join 的问题,求大神帮助

问题描述 有关SQL Server 库中Left Join 的问题,求大神帮助 我想用一个表中的两个字段去关联另一个表中的一个字段 差不多就是 select * from ta a left join tb b on (a.a1=b.b1 or a.a2=b.b2) 逻辑上就是 if a1=b1 then 关联 else if a2=b1 then 关联 请问这么写会不会造成数据重复 或者有其它写法

使用 SQL Server 2005中的 CLR 集成

本文描述了数据库应用程序开发人员和架构师如何利用 SQL Server 2005 中的 CLR 集成功能.本文对基于 CLR 的编程方式与 SQL Server 中支持的现有编程模型(如 TransacT-SQL 和扩展存储过程)进行了比较,并且强调了各自相对的优缺点.还提供了一组选择合适的编程替代方法的高级指导,以及一些示例和代码示例. 一.简介 Microsoft 通过宿主 Microsoft .NET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显