CONVERT在日期转换中的使用示例.sql:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> -- 字符转换为日期时,Style的使用 -- 1. Style=101时,表示日期字符串为:mm/dd/yyyy格式 SELECT CONVERT ( datetime , ' 11/1/2003 ' , 101 ) -- 结果:2003-11-01 00:00:00.000 -- 2. Style=101时,表示日期字符串为:dd/mm/yyyy格式 SELECT CONVERT ( datetime , ' 11/1/2003 ' , 103 ) -- 结果:2003-01-11 00:00:00.000 /* == 日期转换为字符串 == */ DECLARE @dt datetime SET @dt = ' 2003-1-11 ' -- 1. Style=101时,表示将日期转换为:mm/dd/yyyy 格式 SELECT CONVERT ( varchar , @dt , 101 ) -- 结果:01/11/2003 -- 2. Style=103时,表示将日期转换为:dd/mm/yyyy 格式 SELECT CONVERT ( varchar , @dt , 103 ) -- 结果:11/01/2003 /* == 这是很多人经常犯的错误,对非日期型转换使用日期的style样式 == */ SELECT CONVERT ( varchar , ' 2003-1-11 ' , 101 ) -- 结果:2003-1-11
SET DATEFORMAT对日期处理的影响.sql
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> -- 1. /* --说明 SET DATEFORMAT设置对使用CONVERT把字符型日期转换为日期的处理也具有影响 但不影响明确指定了style的CONVERT处理。 -- */ -- 示例 ,在下面的示例中,第一个CONVERT转换未指定style,转换的结果受SET DATAFORMAT的影响,第二个CONVERT转换指定了style,转换结果受style的影响。 -- 设置输入日期顺序为 日/月/年 SET DATEFORMAT DMY -- 不指定Style参数的CONVERT转换将受到SET DATEFORMAT的影响 SELECT CONVERT ( datetime , ' 2-1-2005 ' ) -- 结果: 2005-01-02 00:00:00.000 -- 指定Style参数的CONVERT转换不受SET DATEFORMAT的影响 SELECT CONVERT ( datetime , ' 2-1-2005 ' , 101 ) -- 结果: 2005-02-01 00:00:00.000 GO -- 2. /* --说明 如果输入的日期包含了世纪部分,则对日期进行解释处理时 年份的解释不受SET DATEFORMAT设置的影响。 -- */ -- 示例,在下面的代码中,同样的SET DATEFORMAT设置,输入日期的世纪部分与不输入日期的世纪部分,解释的日期结果不同。 DECLARE @dt datetime -- 设置SET DATEFORMAT为:月日年 SET DATEFORMAT MDY -- 输入的日期中指定世纪部分 SET @dt = ' 01-2002-03 ' SELECT @dt -- 结果: 2002-01-03 00:00:00.000 -- 输入的日期中不指定世纪部分 SET @dt = ' 01-02-03 ' SELECT @dt -- 结果: 2003-01-02 00:00:00.000 GO -- 3. /* --说明 如果输入的日期不包含日期分隔符,那么SQL Server在对日期进行解释时 将忽略SET DATEFORMAT的设置。 -- */ -- 示例,在下面的代码中,不包含日期分隔符的字符日期,在不同的SET DATEFORMAT设置下,其解释的结果是一样的。 DECLARE @dt datetime -- 设置SET DATEFORMAT为:月日年 SET DATEFORMAT MDY SET @dt = ' 010203 ' SELECT @dt -- 结果: 2001-02-03 00:00:00.000 -- 设置SET DATEFORMAT为:日月年 SET DATEFORMAT DMY SET @dt = ' 010203 ' SELECT @dt -- 结果: 2001-02-03 00:00:00.000 -- 输入的日期中包含日期分隔符 SET @dt = ' 01-02-03 ' SELECT @dt -- 结果: 2003-02-01 00:00:00.000
SET LANGUAGE对日期处理的影响示例.sql
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> -- 以下示例演示了在不同的语言环境(SET LANGUAGE)下,DATENAME与CONVERT函数的不同结果。 USE master -- 设置会话的语言环境为: English SET LANGUAGE N ' English ' SELECT DATENAME ( Month , GETDATE ()) AS [ Month ] , DATENAME (Weekday, GETDATE ()) AS [ Weekday ] , CONVERT ( varchar , GETDATE (), 109 ) AS [ CONVERT ] /* --结果: Month Weekday CONVERT ------------- -------------- ------------------------------- March Tuesday Mar 15 2005 8:59PM -- */ -- 设置会话的语言环境为: 简体中文 SET LANGUAGE N ' 简体中文 ' SELECT DATENAME ( Month , GETDATE ()) AS [ Month ] , DATENAME (Weekday, GETDATE ()) AS [ Weekday ] , CONVERT ( varchar , GETDATE (), 109 ) AS [ CONVERT ] /* --结果 Month Weekday CONVERT ------------- --------------- ----------------------------------------- 05 星期四 05 19 2005 2:49:20:607PM -- */
日期格式化处理.sql
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> DECLARE @dt datetime SET @dt = GETDATE () -- 1.短日期格式:yyyy-m-d SELECT REPLACE ( CONVERT ( varchar ( 10 ), @dt , 120 ),N ' -0 ' , ' - ' ) -- 2.长日期格式:yyyy年mm月dd日 -- A. 方法1 SELECT STUFF ( STUFF ( CONVERT ( char ( 8 ), @dt , 112 ), 5 , 0 ,N ' 年 ' ), 8 , 0 ,N ' 月 ' ) + N ' 日 ' -- B. 方法2 SELECT DATENAME ( Year , @dt ) + N ' 年 ' + DATENAME ( Month , @dt ) + N ' 月 ' + DATENAME ( Day , @dt ) + N ' 日 ' -- 3.长日期格式:yyyy年m月d日 SELECT DATENAME ( Year , @dt ) + N ' 年 ' + CAST ( DATEPART ( Month , @dt ) AS varchar ) + N ' 月 ' + DATENAME ( Day , @dt ) + N ' 日 ' -- 4.完整日期+时间格式:yyyy-mm-dd hh:mi:ss:mmm SELECT CONVERT ( char ( 11 ), @dt , 120 ) + CONVERT ( char ( 12 ), @dt , 114 )
日期推算处理.sql
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> DECLARE @dt datetime SET @dt = GETDATE () DECLARE @number int SET @number = 3 -- 1.指定日期该年的第一天或最后一天 -- A. 年的第一天 SELECT CONVERT ( char ( 5 ), @dt , 120 ) + ' 1-1 ' -- B. 年的最后一天 SELECT CONVERT ( char ( 5 ), @dt , 120 ) + ' 12-31 ' -- 2.指定日期所在季度的第一天或最后一天 -- A. 季度的第一天 SELECT CONVERT ( datetime , CONVERT ( char ( 8 ), DATEADD ( Month , DATEPART (Quarter, @dt ) * 3 - Month ( @dt ) - 2 , @dt ), 120 ) + ' 1 ' ) -- B. 季度的最后一天(CASE判断法) SELECT CONVERT ( datetime , CONVERT ( char ( 8 ), DATEADD ( Month , DATEPART (Quarter, @dt ) * 3 - Month ( @dt ), @dt ), 120 ) + CASE WHEN DATEPART (Quarter, @dt ) in ( 1 , 4 ) THEN ' 31 ' ELSE ' 30 ' END ) -- C. 季度的最后一天(直接推算法) SELECT DATEADD ( Day , - 1 , CONVERT ( char ( 8 ), DATEADD ( Month , 1 + DATEPART (Quarter, @dt ) * 3 - Month ( @dt ), @dt ), 120 ) + ' 1 ' ) -- 3.指定日期所在月份的第一天或最后一天 -- A. 月的第一天 SELECT CONVERT ( datetime , CONVERT ( char ( 8 ), @dt , 120 ) + ' 1 ' ) -- B. 月的最后一天 SELECT DATEADD ( Day , - 1 , CONVERT ( char ( 8 ), DATEADD ( Month , 1 , @dt ), 120 ) + ' 1 ' ) -- C. 月的最后一天(容易使用的错误方法) SELECT DATEADD ( Month , 1 , DATEADD ( Day , - DAY ( @dt ), @dt )) -- 4.指定日期所在周的任意一天 SELECT DATEADD ( Day , @number - DATEPART (Weekday, @dt ), @dt ) -- 5.指定日期所在周的任意星期几 -- A. 星期天做为一周的第1天 SELECT DATEADD ( Day , @number - ( DATEPART (Weekday, @dt ) + @@DATEFIRST - 1 ) % 7 , @dt ) -- B. 星期一做为一周的第1天 SELECT DATEADD ( Day , @number - ( DATEPART (Weekday, @dt ) + @@DATEFIRST - 2 ) % 7 - 1 , @dt )