网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > 数据库 > 正文

sql大全(二)

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

CONVERT在日期转换中的使用示例.sql:

  1. --字符转换为日期时,Style的使用 
  2.  
  3. --1. Style=101时,表示日期字符串为:mm/dd/yyyy格式 
  4. SELECT CONVERT(datetime,'11/1/2003',101) 
  5. --结果:2003-11-01 00:00:00.000 
  6.  
  7. --2. Style=101时,表示日期字符串为:dd/mm/yyyy格式 
  8. SELECT CONVERT(datetime,'11/1/2003',103) 
  9. --结果:2003-01-11 00:00:00.000 
  10.  
  11.  
  12. /*== 日期转换为字符串 ==*/ 
  13. DECLARE @dt datetime 
  14. SET @dt='2003-1-11' 
  15.  
  16. --1. Style=101时,表示将日期转换为:mm/dd/yyyy 格式 
  17. SELECT CONVERT(varchar,@dt,101) 
  18. --结果:01/11/2003 
  19.  
  20. --2. Style=103时,表示将日期转换为:dd/mm/yyyy 格式 
  21. SELECT CONVERT(varchar,@dt,103) 
  22. --结果:11/01/2003 
  23.  
  24.  
  25. /*== 这是很多人经常犯的错误,对非日期型转换使用日期的style样式 ==*/ 
  26. SELECT CONVERT(varchar,'2003-1-11',101) 
  27. --结果:2003-1-11 

SET DATEFORMAT对日期处理的影响.sql

  1. --1. 
  2. /*--说明 
  3.     SET DATEFORMAT设置对使用CONVERT把字符型日期转换为日期的处理也具有影响 
  4.     但不影响明确指定了style的CONVERT处理。 
  5. --*/ 
  6.  
  7. --示例 ,在下面的示例中,第一个CONVERT转换未指定style,转换的结果受SET DATAFORMAT的影响,第二个CONVERT转换指定了style,转换结果受style的影响。 
  8. --设置输入日期顺序为 日/月/年 
  9. SET DATEFORMAT DMY 
  10.  
  11. --不指定Style参数的CONVERT转换将受到SET DATEFORMAT的影响 
  12. SELECT CONVERT(datetime,'2-1-2005'
  13. --结果: 2005-01-02 00:00:00.000 
  14.  
  15. --指定Style参数的CONVERT转换不受SET DATEFORMAT的影响 
  16. SELECT CONVERT(datetime,'2-1-2005',101) 
  17. --结果: 2005-02-01 00:00:00.000 
  18. GO 
  19.  
  20. --2. 
  21. /*--说明 
  22.  
  23.     如果输入的日期包含了世纪部分,则对日期进行解释处理时 
  24.     年份的解释不受SET DATEFORMAT设置的影响。 
  25. --*/ 
  26.  
  27. --示例,在下面的代码中,同样的SET DATEFORMAT设置,输入日期的世纪部分与不输入日期的世纪部分,解释的日期结果不同。 
  28. DECLARE @dt datetime 
  29.  
  30. --设置SET DATEFORMAT为:月日年 
  31. SET DATEFORMAT MDY 
  32.  
  33. --输入的日期中指定世纪部分 
  34. SET @dt='01-2002-03' 
  35. SELECT @dt 
  36. --结果: 2002-01-03 00:00:00.000 
  37.  
  38. --输入的日期中不指定世纪部分 
  39. SET @dt='01-02-03' 
  40. SELECT @dt 
  41. --结果: 2003-01-02 00:00:00.000 
  42. GO 
  43.  
  44. --3. 
  45. /*--说明 
  46.  
  47.     如果输入的日期不包含日期分隔符,那么SQL Server在对日期进行解释时 
  48.     将忽略SET DATEFORMAT的设置。 
  49. --*/ 
  50.  
  51. --示例,在下面的代码中,不包含日期分隔符的字符日期,在不同的SET DATEFORMAT设置下,其解释的结果是一样的。 
  52. DECLARE @dt datetime 
  53.  
  54. --设置SET DATEFORMAT为:月日年 
  55. SET DATEFORMAT MDY 
  56. SET @dt='010203' 
  57. SELECT @dt 
  58. --结果: 2001-02-03 00:00:00.000 
  59.  
  60. --设置SET DATEFORMAT为:日月年 
  61. SET DATEFORMAT DMY 
  62. SET @dt='010203' 
  63. SELECT @dt 
  64. --结果: 2001-02-03 00:00:00.000 
  65.  
  66. --输入的日期中包含日期分隔符 
  67. SET @dt='01-02-03' 
  68. SELECT @dt 
  69. --结果: 2003-02-01 00:00:00.000 

SET LANGUAGE对日期处理的影响示例.sql

  1. --以下示例演示了在不同的语言环境(SET LANGUAGE)下,DATENAME与CONVERT函数的不同结果。 
  2. USE master 
  3.  
  4. --设置会话的语言环境为: English 
  5. SET LANGUAGE N'English' 
  6. SELECT  
  7.     DATENAME(Month,GETDATE()) AS [Month], 
  8.     DATENAME(Weekday,GETDATE()) AS [Weekday], 
  9.     CONVERT(varchar,GETDATE(),109) AS [CONVERT
  10. /*--结果: 
  11. Month    Weekday   CONVERT 
  12. ------------- -------------- ------------------------------- 
  13. March    Tuesday   Mar 15 2005  8:59PM 
  14. --*/ 
  15.  
  16. --设置会话的语言环境为: 简体中文 
  17. SET LANGUAGE N'简体中文' 
  18. SELECT  
  19.     DATENAME(Month,GETDATE()) AS [Month], 
  20.     DATENAME(Weekday,GETDATE()) AS [Weekday], 
  21.     CONVERT(varchar,GETDATE(),109) AS [CONVERT
  22. /*--结果 
  23. Month    Weekday    CONVERT 
  24. ------------- --------------- ----------------------------------------- 
  25. 05       星期四     05 19 2005  2:49:20:607PM 
  26. --*/ 

日期格式化处理.sql

  1. DECLARE @dt datetime 
  2. SET @dt=GETDATE() 
  3.  
  4. --1.短日期格式:yyyy-m-d 
  5. SELECT REPLACE(CONVERT(varchar(10),@dt,120),N'-0','-'
  6.  
  7. --2.长日期格式:yyyy年mm月dd日  
  8. --A. 方法1  
  9. SELECT STUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N'年'),8,0,N'月')+N'日' 
  10. --B. 方法2  
  11. SELECT DATENAME(Year,@dt)+N'年'+DATENAME(Month,@dt)+N'月'+DATENAME(Day,@dt)+N'日' 
  12.  
  13. --3.长日期格式:yyyy年m月d日 
  14. SELECT DATENAME(Year,@dt)+N'年'+CAST(DATEPART(Month,@dt) AS varchar)+N'月'+DATENAME(Day,@dt)+N'日' 
  15.  
  16. --4.完整日期+时间格式:yyyy-mm-dd hh:mi:ss:mmm 
  17. SELECT CONVERT(char(11),@dt,120)+CONVERT(char(12),@dt,114) 

日期推算处理.sql

  1. DECLARE @dt datetime 
  2. SET @dt=GETDATE() 
  3.  
  4. DECLARE @number int 
  5. SET @number=3 
  6.  
  7. --1.指定日期该年的第一天或最后一天 
  8. --A. 年的第一天 
  9. SELECT CONVERT(char(5),@dt,120)+'1-1' 
  10.  
  11. --B. 年的最后一天 
  12. SELECT CONVERT(char(5),@dt,120)+'12-31' 
  13.  
  14.  
  15. --2.指定日期所在季度的第一天或最后一天 
  16. --A. 季度的第一天 
  17. SELECT CONVERT(datetime, 
  18.     CONVERT(char(8), 
  19.         DATEADD(Month
  20.             DATEPART(Quarter,@dt)*3-Month(@dt)-2, 
  21.             @dt), 
  22.         120)+'1'
  23.  
  24. --B. 季度的最后一天(CASE判断法) 
  25. SELECT CONVERT(datetime, 
  26.     CONVERT(char(8), 
  27.         DATEADD(Month
  28.             DATEPART(Quarter,@dt)*3-Month(@dt), 
  29.             @dt), 
  30.         120) 
  31.     +CASE WHEN DATEPART(Quarter,@dt) in(1,4) 
  32.         THEN '31'ELSE '30' END
  33.  
  34. --C. 季度的最后一天(直接推算法) 
  35. SELECT DATEADD(Day,-1, 
  36.     CONVERT(char(8), 
  37.         DATEADD(Month
  38.             1+DATEPART(Quarter,@dt)*3-Month(@dt), 
  39.             @dt), 
  40.         120)+'1'
  41.  
  42.  
  43. --3.指定日期所在月份的第一天或最后一天 
  44. --A. 月的第一天 
  45. SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1'
  46.  
  47. --B. 月的最后一天 
  48. SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1'
  49.  
  50. --C. 月的最后一天(容易使用的错误方法) 
  51. SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt)) 
  52.  
  53.  
  54. --4.指定日期所在周的任意一天 
  55. SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt) 
  56.  
  57.  
  58. --5.指定日期所在周的任意星期几 
  59. --A.  星期天做为一周的第1天 
  60. SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt) 
  61.  
  62. --B.  星期一做为一周的第1天 
  63. SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt) 

特殊日期加减函数.sql

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_DateADD]'and xtype in (N'FN', N'IF', N'TF')) 
  2.     drop function [dbo].[f_DateADD] 
  3. GO 
  4.  
  5. /*--特殊日期加减函数 
  6.  
  7.     对于日期指定部分的加减,使用DATEADD函数就可以轻松实现。 
  8.     在实际的处理中,还有一种比较另类的日期加减处理 
  9.     就是在指定的日期中,加上(或者减去)多个日期部分 
  10.     比如将2005年3月11日,加上1年3个月11天2小时。 
  11.     对于这种日期的加减处理,DATEADD函数的力量就显得有点不够。 
  12.  
  13.     本函数实现这样格式的日期字符串加减处理: 
  14.     y-m-d h:m:s.m | -y-m-d h:m:s.m 
  15.     说明: 
  16.     要加减的日期字符输入方式与日期字符串相同。日期与时间部分用空格分隔 
  17.     最前面一个字符如果是减号(-)的话,表示做减法处理,否则做加法处理。 
  18.     如果日期字符只包含数字,则视为日期字符中,仅包含天的信息。 
  19. --*/ 
  20.  
  21. /*--调用示例 
  22.  
  23.     SELECT dbo.f_DateADD(GETDATE(),'11:10'
  24. --*/ 
  25.  
  26. CREATE FUNCTION dbo.f_DateADD( 
  27. @Date     datetime, 
  28. @DateStr   varchar(23) 
  29. )RETURNS datetime 
  30. AS 
  31. BEGIN 
  32.     DECLARE @bz int,@s varchar(12),@i int 
  33.  
  34.     IF @DateStr IS NULL OR @Date IS NULL  
  35.         OR(CHARINDEX('.',@DateStr)>0 
  36.             AND @DateStr NOT LIKE '%[:]%[:]%.%'
  37.         RETURN(NULL
  38.     IF @DateStr='' RETURN(@Date
  39.  
  40.     SELECT @bz=CASE  
  41.             WHEN LEFT(@DateStr,1)='-' THEN -1 
  42.             ELSE 1 END
  43.         @DateStr=CASE  
  44.             WHEN LEFT(@Date,1)='-'  
  45.             THEN STUFF(RTRIM(LTRIM(@DateStr)),1,1,''
  46.             ELSE RTRIM(LTRIM(@DateStr)) END 
  47.  
  48.     IF CHARINDEX(' ',@DateStr)>1 
  49.         OR CHARINDEX('-',@DateStr)>1 
  50.         OR(CHARINDEX('.',@DateStr)=0 
  51.             AND CHARINDEX(':',@DateStr)=0) 
  52.     BEGIN 
  53.         SELECT @i=CHARINDEX(' ',@DateStr+' '
  54.             ,@s=REVERSE(LEFT(@DateStr,@i-1))+'-' 
  55.             ,@DateStr=STUFF(@DateStr,1,@i,''
  56.             ,@i=0 
  57.         WHILE @s>'' and @i<3 
  58.             SELECT @Date=CASE @i 
  59.                     WHEN 0 THEN DATEADD(Day,@bz*REVERSE(LEFT(@s,CHARINDEX('-',@s)-1)),@Date
  60.                     WHEN 1 THEN DATEADD(Month,@bz*REVERSE(LEFT(@s,CHARINDEX('-',@s)-1)),@Date
  61.                     WHEN 2 THEN DATEADD(Year,@bz*REVERSE(LEFT(@s,CHARINDEX('-',@s)-1)),@Date
  62.                 END
  63.                 @s=STUFF(@s,1,CHARINDEX('-',@s),''), 
  64.                 @i=@i+1                 
  65.     END 
  66.     IF @DateStr>'' 
  67.     BEGIN 
  68.         IF CHARINDEX('.',@DateStr)>0 
  69.             SELECT @Date=DATEADD(Millisecond 
  70.                     ,@bz*STUFF(@DateStr,1,CHARINDEX('.',@DateStr),''), 
  71.                     @Date), 
  72.                 @DateStr=LEFT(@DateStr,CHARINDEX('.',@DateStr)-1)+':'
  73.                 @i=0 
  74.         ELSE 
  75.             SELECT @DateStr=@DateStr+':',@i=0 
  76.         WHILE @DateStr>'' and @i<3 
  77.             SELECT @Date=CASE @i 
  78.                     WHEN 0 THEN DATEADD(Hour,@bz*LEFT(@DateStr,CHARINDEX(':',@DateStr)-1),@Date
  79.                     WHEN 1 THEN DATEADD(Minute,@bz*LEFT(@DateStr,CHARINDEX(':',@DateStr)-1),@Date
  80.                     WHEN 2 THEN DATEADD(Second,@bz*LEFT(@DateStr,CHARINDEX(':',@DateStr)-1),@Date
  81.                 END
  82.                 @DateStr=STUFF(@DateStr,1,CHARINDEX(':',@DateStr),''), 
  83.                 @i=@i+1 
  84.     END 
  85.  
  86.     RETURN(@Date
  87. END 
  88. GO 

查询指定日期段内过生日的人员.sql

  1. --测试数据 
  2. DECLARE @t TABLE(ID int,Name varchar(10),Birthday datetime) 
  3. INSERT @t SELECT 1,'aa','1999-01-01' 
  4. UNION ALL SELECT 2,'bb','1996-02-29' 
  5. UNION ALL SELECT 3,'bb','1934-03-01' 
  6. UNION ALL SELECT 4,'bb','1966-04-01' 
  7. UNION ALL SELECT 5,'bb','1997-05-01' 
  8. UNION ALL SELECT 6,'bb','1922-11-21' 
  9. UNION ALL SELECT 7,'bb','1989-12-11' 
  10.  
  11. DECLARE @dt1 datetime,@dt2 datetime 
  12.  
  13. --查询 2003-12-05 至 2004-02-28 生日的记录 
  14. SELECT @dt1='2003-12-05',@dt2='2004-02-28' 
  15. SELECT * FROM @t 
  16. WHERE DATEADD(Year,DATEDIFF(Year,Birthday,@dt1),Birthday) 
  17.         BETWEEN @dt1 AND @dt2 
  18.     OR DATEADD(Year,DATEDIFF(Year,Birthday,@dt2),Birthday) 
  19.         BETWEEN @dt1 AND @dt2 
  20. /*--结果 
  21. ID         Name       Birthday 
  22. ---------------- ---------------- -------------------------- 
  23. 1           aa         1999-01-01 00:00:00.000 
  24. 7           bb         1989-12-11 00:00:00.000 
  25. --*/ 
  26.  
  27. --查询 2003-12-05 至 2006-02-28 生日的记录 
  28. SET @dt2='2006-02-28' 
  29. SELECT * FROM @t 
  30. WHERE DATEADD(Year,DATEDIFF(Year,Birthday,@dt1),Birthday) 
  31.         BETWEEN @dt1 AND @dt2 
  32.     OR DATEADD(Year,DATEDIFF(Year,Birthday,@dt2),Birthday) 
  33.         BETWEEN @dt1 AND @dt2 
  34. /*--查询结果 
  35. ID         Name       Birthday 
  36. ---------------- ----------------- -------------------------- 
  37. 1           aa         1999-01-01 00:00:00.000 
  38. 2           bb         1996-02-29 00:00:00.000 
  39. 7           bb         1989-12-11 00:00:00.000 
  40. --*/ 

生成日期列表的函数.sql

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getdate]'and xtype in (N'FN', N'IF', N'TF')) 
  2. drop function [dbo].[f_getdate] 
  3. GO 
  4.  
  5. /*--生成日期列表 
  6.      
  7.     生成指定年份的工作日/休息日列表 
  8.  
  9. --邹建 2003.12(引用请保留此信息)--*/ 
  10.  
  11. /*--调用示例 
  12.  
  13.     --查询 2003 年的工作日列表 
  14.     SELECT * FROM dbo.f_getdate(2003,0) 
  15.      
  16.     --查询 2003 年的休息日列表 
  17.     SELECT * FROM dbo.f_getdate(2003,1) 
  18.  
  19.     --查询 2003 年全部日期列表 
  20.     SELECT * FROM dbo.f_getdate(2003,NULL
  21. --*/ 
  22. CREATE FUNCTION dbo.f_getdate( 
  23. @year int,    --要查询的年份 
  24. @bz bit       --@bz=0 查询工作日,@bz=1 查询休息日,@bz IS NULL 查询全部日期 
  25. )RETURNS @re TABLE(id int identity(1,1),Date datetime,Weekday nvarchar(3)) 
  26. AS 
  27. BEGIN 
  28.     DECLARE @tb TABLE(ID int IDENTITY(0,1),Date datetime) 
  29.     INSERT INTO @tb(DateSELECT TOP 366 DATEADD(Year,@YEAR-1900,'1900-1-1'
  30.     FROM sysobjects a ,sysobjects b 
  31.     UPDATE @tb SET Date=DATEADD(DAY,id,Date
  32.     DELETE FROM @tb WHERE Date>DATEADD(Year,@YEAR-1900,'1900-12-31'
  33.      
  34.     IF @bz=0 
  35.         INSERT INTO @re(Date,Weekday) 
  36.         SELECT Date,DATENAME(Weekday,Date
  37.         FROM @tb 
  38.         WHERE (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 BETWEEN 1 AND 5 
  39.     ELSE IF @bz=1 
  40.         INSERT INTO @re(Date,Weekday) 
  41.         SELECT Date,DATENAME(Weekday,Date
  42.         FROM @tb 
  43.         WHERE (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 IN (0,6) 
  44.     ELSE 
  45.         INSERT INTO @re(Date,Weekday) 
  46.         SELECT Date,DATENAME(Weekday,Date
  47.         FROM @tb 
  48.          
  49.     RETURN 
  50. END 
  51. GO 
  52.  
  53.  
  54. /*====================================================================*/ 
  55.  
  56. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getdate]'and xtype in (N'FN', N'IF', N'TF')) 
  57. drop function [dbo].[f_getdate] 
  58. GO 
  59.  
  60. /*--生成列表 
  61.  
  62.     生成指定日期段的日期列表 
  63.  
  64. --邹建 2005.03(引用请保留此信息)--*/ 
  65.  
  66. /*--调用示例 
  67.  
  68.     --查询工作日 
  69.     SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',0) 
  70.      
  71.     --查询休息日 
  72.     SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',1) 
  73.      
  74.     --查询全部日期 
  75.     SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',NULL
  76. --*/ 
  77.  
  78. CREATE FUNCTION dbo.f_getdate( 
  79. @begin_date Datetime,  --要查询的开始日期 
  80. @end_date Datetime,    --要查询的结束日期 
  81. @bz bit                --@bz=0 查询工作日,@bz=1 查询休息日,@bz IS NULL 查询全部日期 
  82. )RETURNS @re TABLE(id int identity(1,1),Date datetime,Weekday nvarchar(3)) 
  83. AS 
  84. BEGIN 
  85.     DECLARE @tb TABLE(ID int IDENTITY(0,1),a bit
  86.     INSERT INTO @tb(a) SELECT TOP 366 0 
  87.     FROM sysobjects a ,sysobjects b 
  88.      
  89.     IF @bz=0 
  90.         WHILE @begin_date<=@end_date 
  91.         BEGIN 
  92.             INSERT INTO @re(Date,Weekday) 
  93.             SELECT Date,DATENAME(Weekday,Date
  94.             FROM
  95.                 SELECT Date=DATEADD(Day,ID,@begin_date) 
  96.                 FROM @tb                 
  97.             )a WHERE Date<=@end_date 
  98.                 AND (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 BETWEEN 1 AND 5 
  99.             SET @begin_date=DATEADD(Day,366,@begin_date) 
  100.         END 
  101.     ELSE IF @bz=1 
  102.         WHILE @begin_date<=@end_date 
  103.         BEGIN 
  104.             INSERT INTO @re(Date,Weekday) 
  105.             SELECT Date,DATENAME(Weekday,Date
  106.             FROM
  107.                 SELECT Date=DATEADD(Day,ID,@begin_date) 
  108.                 FROM @tb                 
  109.             )a WHERE Date<=@end_date 
  110.                 AND (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 in(0,6) 
  111.             SET @begin_date=DATEADD(Day,366,@begin_date) 
  112.         END 
  113.     ELSE 
  114.         WHILE @begin_date<=@end_date 
  115.         BEGIN 
  116.             INSERT INTO @re(Date,Weekday) 
  117.             SELECT Date,DATENAME(Weekday,Date
  118.             FROM
  119.                 SELECT Date=DATEADD(Day,ID,@begin_date) 
  120.                 FROM @tb                 
  121.             )a WHERE Date<=@end_date 
  122.             SET @begin_date=DATEADD(Day,366,@begin_date) 
  123.         END 
  124.  
  125.     RETURN 
  126. END 
  127. GO 
  • 上一篇资讯: sql大全(一)
  • 下一篇资讯: sql大全(三)
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师