如何用SQL取出一个日期是星期几

解决方案 »

  1.   

    select DATENAME(weekday,getdate())
    /*
    (无列名)
    星期三
    */
      

  2.   

    SELECT datename(weekday, '2009-10-15') [星期]
    星期                             
    ------------------------------ 
    星期四
      

  3.   

    select  datename(weekday,getdate()) 
      

  4.   

     语法DATEDIFF ( datepart , startdate , enddate )
     参数datepart 
    是指定所跨边界类型的 startdate 和 enddate 的一部分。 下表列出了所有有效的 datepart 参数。 用户定义的变量等效项是无效的。datepart 缩写 
    year
     yy, yyyy
     
    quarter
     qq, q
     
    month
     mm, m
     
    dayofyear
     dy, y
     
    day
     dd, d
     
    week
     wk, ww
     
    hour
     hh
     
    minute
     mi, n
     
    second
     ss, s
     
    millisecond
     ms
     
    microsecond
     mcs
     
    nanosecond
     ns
     startdate 
    是一个表达式,可以解析为 time、date、smalldatetime、datetime、datetime2 或 datetimeoffset 值。date 可以是表达式、列表达式、用户定义的变量或字符串文字。从 enddate 减去 startdate。为避免不确定性,请使用四位数年份。 有关两位数年份的信息,请参阅two digit year cutoff 选项。enddate 
    请参阅 startdate。
     返回类型int
     返回值每个 datepart 及其缩写都返回相同的值。 
    如果返回值超出 int 的范围(-2,147,483,648 到 +2,147,483,647),则会返回一个错误。 对于 millisecond,startdate 与 enddate 之间的最大差值为 24 天 20 小时 31 分钟 23.647 秒。 对于 second,最大差值为 68 年。如果为 startdate 和 enddate 都只指定了时间值,并且 datepart 不是时间 datepart,则会返回 0。在计算返回值时不使用 startdate 或 endate 的时区偏移量部分。由于 smalldatetime 仅精确到分钟,因此将 smalldatetime 值用作 startdate 或 enddate 时,返回值中的秒和毫秒将始终设置为 0。如果只为某个日期数据类型的变量指定时间值,则所缺日期部分的值将设置为默认值:1900-01-01。 如果只为某个时间或日期数据类型的变量指定日期值,则所缺时间部分的值将设置为默认值:00:00:00。 如果 startdate 和 enddate 中有一个只含时间部分,另一个只含日期部分,则所缺时间和日期部分将设置为各自的默认值。如果 startdate 和 enddate 属于不同的日期数据类型,并且其中一个的时间部分或秒的小数部分精度比另一个高,则另一个的所缺部分将设置为 0。日期部分边界
    以下语句具有相同的 startdate 和相同的 endate。 这些日期是相邻的,在时间上相差 .0000001 秒。 每个语句中 startdate 与 endate 之间的差跨其 datepart 的一个日历或时间边界。 每个语句都返回 1。如果本例使用不同的年份且 startdate 和 endate 都在相同的日历周内,则 week 的返回值将为 0。SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(quarter, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(month, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(dayofyear, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(day, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(hour, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(minute, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(second, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');
     备注DATEDIFF 可用在选择列表、WHERE、HAVING、GROUP BY 和 ORDER BY 子句中。----------------------------------------------------我是大胆的分隔线----------------------------------------------------Sql Server中的日期与时间函数
    1.   当前系统日期、时间
         select getdate()2. dateadd   在向指定日期加上一段时间的基础上,返回新的 datetime 值
        例如:向日期加上2天
        select dateadd(day,2,'2004-10-15')   --返回:2004-10-17 00:00:00.0003. datediff 返回跨两个指定日期的日期和时间边界数。
        select datediff(day,'2004-09-01','2004-09-18')    --返回:174. datepart 返回代表指定日期的指定日期部分的整数。
       SELECT DATEPART(month, '2004-10-15')   --返回 105. 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指定的方式,加上number之后的日期 
    DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值 
    DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称参数 interval的设定值如下:值 缩 写      (Sql Server)   Access 和 ASP      说明 
    Year           Yy              yyyy               年 1753 ~ 9999 
    Quarter        Qq              q                  季 1 ~ 4 
    Month          Mm              m                  月1 ~ 12 
    Day of year    Dy              y                  一年的日数,一年中的第几日 1-366 
    Day            Dd              d                  日,1-31 
    Weekday        Dw              w                  一周的日数,一周中的第几日 1-7 
    Week           Wk              ww                 周,一年中的第几周 0 ~ 51 
    Hour           Hh              h                  时0 ~ 23 
    Minute         Mi              n                  分钟0 ~ 59 
    Second         Ss              s                  秒 0 ~ 59 
    Millisecond    Ms              -                  毫秒 0 ~ 999access 和 asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似举例:
    1.GetDate() 用于sql server :select GetDate()2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒
    DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)
    DatePart('d','2005-7-25 22:56:32')返回值为 25即25号
    DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天
    DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年
    ----------------------------------------Sql Server 常用日期格式 
    发布于:2006-2-24 17:53:25 已被阅读: 158  
    SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 
    例如: 
    select getdate() 
    2004-09-12 11:06:08.177 
    整理了一下SQL Server里面可能经常会用到的日期格式转换方法: 
    举例如下: 
    select CONVERT(varchar, getdate(), 120 ) 
    2004-09-12 11:06:08select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') 
    20040912110608select CONVERT(varchar(12) , getdate(), 23 ) 
    2004-09-12select CONVERT(varchar(12) , getdate(), 111 ) 
    2004/09/12select CONVERT(varchar(12) , getdate(), 112 ) 
    20040912select CONVERT(varchar(12) , getdate(), 102 ) 
    2004.09.12select CONVERT(varchar(12) , getdate(), 101 ) 
    09/12/2004select CONVERT(varchar(12) , getdate(), 103 ) 
    12/09/2004select CONVERT(varchar(12) , getdate(), 104 ) 
    12.09.2004select CONVERT(varchar(12) , getdate(), 105 ) 
    12-09-2004select CONVERT(varchar(12) , getdate(), 106 ) 
    12 09 2004select CONVERT(varchar(12) , getdate(), 107 ) 
    09 12, 2004select CONVERT(varchar(12) , getdate(), 108 ) 
    11:06:08select CONVERT(varchar(12) , getdate(), 109 ) 
    09 12 2004 1select CONVERT(varchar(12) , getdate(), 110 ) 
    09-12-2004select CONVERT(varchar(12) , getdate(), 113 ) 
    12 09 2004 1select CONVERT(varchar(12) , getdate(), 114 ) 
    11:06:08.177 --------------------------------------------------
    1.DateAdd ( I , N , D ) 
    将一个日期加上一段期间后的日期。 I :设定一个日期( Date )所加上的一段期间的单位。譬如 interval="d" 表示 N的单位为日。 I的设定值如下: 
    yyyy Year 年 
    q Quarter 季 
    m Month 月 
    d Day 日 
    w Weekday 星期 
    h Hour 时 
    n Minute 分 
    s Second 秒 
    N :数值表达式,设定一个日期所加上的一段期间,可为正值或负值,正值表示加(结果为 >date 以后的日期),负值表示减(结果为 >date 以前的日期)。 
    D :待加减的日期。 
    例子: DateAdd ( "m" , 1 , "31-Jan-98") 
    结果: 28-Feb-98 
    说明:将日期 31-Jan-98 加上一个月,结果为 28-Feb-98 而非 31-Fe-98 。 
    例子: DateAdd ( "d" , 20 , "30-Jan-99") 
    结果: 1999/2/9 
    说明:将一个日期 30-Jan-99 加上 20 天后的日期。2.Day( 日期的字符串或表达式 ) 
    传回日期的「日」部份。 
    例子: Day(" 12/1/1999 ") 
    结果: 13.DateDiff (I , D1 , D2[,FW[,FY]]) 
    计算两个日期之间的期间。 
    I :设定两个日期之间的期间计算之单位。譬如 >I="m" 表示计算的单位为月。 >I 的设定值如: 
    yyyy > Year 年 
    q Quarter 季 
    m Month 月 
    d Day 日 
    w Weekday 星期 
    h Hour 时 
    n Minute 分 
    s Second 秒 
    D1 ,D2:计算期间的两个日期表达式,若 >date1 较早,则两个日期之间的期间结果为正值;若 >date2 较早, 则结果为负值。 
    FW :设定每周第一天为星期几, 若未设定表示为星期天。 >FW 的设定值如下: 
    0 使用 >API 的设定值。 
    1 星期天 
    2 星期一 
    3 星期二 
    4 星期三 
    5 星期四 
    6 星期五 
    7 星期六 
    FY :设定一年的第一周, 若未设定则表示一月一日那一周为一年的第一周。 >FY 的设定值如下: 
    0 使用 >API 的设定值。 
    1 一月一日那一周为一年的第一周 
    2 至少包括四天的第一周为一年的第一周 
    3 包括七天的第一周为一年的第一周 
    例子: DateDiff ("d","25-Mar-99 ","30-Jun-99 ") 
    结果: 97 
    说明:显示两个日期之间的期间为 97 天 
    -------------------------------------------------
    二、日期/时间函数(可以工作在Select,FROM,Where之间)
    1。ADD_MONTHS:将指定的日期增加一个月。
    SQL>Select TASK,STARTDATE,ENDDATE orIGNAL_END,ADD_MONTHS(ENDDATE,2)
              FROM PROJECT;
    2。LAST_DAY:可以返回指定月份的最后一天。
    SQL>Select ENDDATE,LAST_DAY(ENDDATE) FROM PROJECT;
    3。MONTHS_BETWEEN:查询给定2个日期之间有多少个月。
    SQL>Select TASK,STARTDATE,ENNDATE,MONTHS_BETWEEN(STARTDATE,ENDDATE) DURATION 
               FROM PROJECT;   (返回结果是负值).
       可以利用负值来判断某一日期是否在另一个日期之前,
    SQL>Select * FROM PROJECT Where MONTHS_BETWEEN ('19 MAY 95',STARTDATE)>0;
    4。NEW_TIME:如果你想把时间调整到你所在的时区,你可以使用NEW_TIME,下边给出了所有时区。
    SQL>Select ENDDATE EDT,NEW_TIME (ENDDATE,'EDT','PDT') FROM PROJECT;
    5。NEXT_DAY:将返回与指定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期.如果你想知道你所指定的日期的星期五是几号,可以这样:
    SQL>Select STARTDATE,NEXT_DAY(STARTDATE,'FRIDAY') FROM PROJECT;
    6。SYSDATE:将返回系统的日期和时间。如:
    SQL>Select DISTINCT SYSDAY FROM PROJECT;赠品
      

  5.   

    SELECT datename(w, '2009-10-15') [星期]
    /*
    星期
    ------------------------------
    星期四(1 行受影响)
    */
      

  6.   

    select DATENAME(weekday,getdate()) 
    select DATEPART(weekday,getdate())
      

  7.   

    set DATEFIRST 1
    select DATENAME(weekday,getdate()) 
    select DATEPART(weekday,getdate())
      

  8.   


    select   datepart(w,getdate())/*4*/与--set @@datefirst有关
      

  9.   

    select @@datefirst --当前开始的第一天 我的默认为7
    select case 
    when datepart(dw,getdate())-1=0 then '星期日'
    when datepart(dw,getdate())-1=1 then '星期一'
    when datepart(dw,getdate())-1=2 then '星期二'
    when datepart(dw,getdate())-1=3 then '星期三'
    when datepart(dw,getdate())-1=4 then '星期四'
    when datepart(dw,getdate())-1=5 then '星期五'
    when datepart(dw,getdate())-1=6 then '星期六'
    end