• sql语句 关于日期时间、类型转换的东西


    (一)

    1, select update_date, CONVERT(VARCHAR(30),update_date,111) jj ,CONVERT(VARCHAR(30),update_date,8) aa from report_month   //update_date为datetime型,结果显示为:

                 update_date                                     jj                          aa

    2007-01-06 16:14:50.437                     2007/01/06              16:14:50

    select DATEPART(mm,sign_date) montha,DATEPART(dd,sign_date) daya,sign_date  from report_day

              montha       daya                             sign_date

                5                  1                     2009-05-01 00:00:00.000

    SELECT DATENAME(month, getdate()) AS 'Month Name'

    2.按日期段查询:select * from report_day  where sign_date between '2009-5-1' And '2009-5-7'(v)

               select * from report_day  where sign_date between '2009-4' And '2009-5'(x)

    3. ----日期函数----
      DAY() --函数返回date_expression 中的日期值
      MONTH() --函数返回date_expression 中的月份值
      YEAR() --函数返回date_expression 中的年份值
      DATEADD(<datepart> ,<number> ,<date>)
      --函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
      DATEDIFF(<datepart> ,<number> ,<date>)
      --函数返回两个指定日期在datepart 方面的不同之处
      DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分
      DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分
      GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间

           

    ----数据类型转换函数----
      CAST() 函数语法如下
      CAST (<expression> AS <data_ type>[ length ])
      CONVERT() 函数语法如下
      CONVERT(<data_ type>[ length ], <expression> [, style])

    select cast(shift_id as int)+1  aa from report_day

    select  sum(convert(real,work_days)),week_days  aa from report_day  group by week_days

    adoquery2.SQL.add('select  emp_id  工号,round(sum(cast(ot_hrs as real)),2) 平时加班,round(sum(cast(work_hrs as real)),2) 工作小时 from report_day  group by emp_id');

    例如:select id,A.Name,A.Age ,
    convert(int, sum(case 工资项目 when'基本工资' then 工资金额 end ) )基本工资,
    cast( sum(case 工资项目 when '补贴'then 工资金额 end )As int) as 补贴,
    convert(int,sum(case 工资项目 when '津贴'then 工资金额 end)) as 津贴,
    convert(int,sum (工资金额)) as 合计
    from A,B where id=Emp_id group by id,A.Name,A.Age

    4.昨天想到的按日期统计数据,后来在自己电脑上看以前当的资料时,找到解决办法了,确实很实用。说白了,就是
    只想得到日期或时间的一部分,而不是完整的日期和时间。然后在统计。

    用到的数据库和表(MS SqlServer数据库)
    use master
    go

    if exists(select * from sysdatabases where name='Spending')
    drop database Spending

    create database Spending
    on
    (
    name='Spending_data',
    filename='D:Spending_data.mdf',
    size=3 mb,
    filegrowth=10%
    )
    log on
    (
    name='Spending_log',
    filename='D:Spending_log.ldf',
    size=3 mb,
    filegrowth=10%
    )
    go


    use Spending
    go

    if exists(select * from sysobjects where name='consumption')
    drop table consumption
    go
    create table consumption
    (
      cid int primary key identity(1,1),
      cdate datetime not null,
      cmoney money not null
    )
    go


    insert into consumption values('20090624',23)
    insert into consumption values('20090625',56)
    insert into consumption values('20090625',42)
    insert into consumption values('20090626',45)
    insert into consumption values('20090627',12)
    insert into consumption values('20090628',32)
    insert into consumption values('20090629',36)
    insert into consumption values('20090701',16)

    select * from consumption

    比如我想统计每天的数据和(25号时候有两条记录)用下面语句,只统计6月份每一天的数据和(如果年份多,再加上限制条件)

    select DATEPART(dd,cdate) as '号', sum(cmoney) from consumption  where datepart(mm,cdate)=6  group by DATEPART(dd,cdate)
    显示结果
    24    23.00
    25    98.00
    26    45.00
    、、、

    统计一周的如下

    select DATEPART(wk,cdate) as '周', sum(cmoney) from consumption group by DATEPART(wk,cdate)
    显示结果
    26    178.00
    27     84.00

    统计月的如下

    select datepart(mm,cdate) as '月份',sum(cmoney) from consumption where datepart(yy,cdate)=2009 group by datepart(mm,cdate)

    显示结果
    6    246.00
    7     16.00

    以上用到的就是“DATEPART()”函数。函数DATEPART()的参数是两个变量。第一个变量指定要抽取日期的哪一部分;第二个变量是实际的数据。

    日期的各部分及其简写
    日期部分           简写               值
    year                yy                1753--9999
    quarter             qq                1--4
    month               mm                1--12
    day of year         dy                1--366
    day                 dd                1--31
    week                wk                1--53
    weekday             dw                1--7(Sunday--Saturday)
    hour                hh                0--23
    minute              mi                0--59
    second              ss                0--59
    milisecond          ms                0--999




    再有就是我们数据库某字段设计为 datetime类型后,插入数据后,自动将毫秒数都显示出来了
    例如我上面插入的是 20090624,可是在查出来就变成2009-06-24 00:00:00.000,这样在页面
    显示肯定有问题,这种情况可以用CONVERT()函数

    CONVERT(data_type,expression,[style])

    此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)
    相互转换的时候才用到.

    语句及查询结果:
    SELECT CONVERT(varchar(100), cdate, 0):24 06 2009 21:57PM
    SELECT CONVERT(varchar(100), cdate, 1): 06/24/09
    SELECT CONVERT(varchar(100), cdate, 2): 09.06.24
    SELECT CONVERT(varchar(100), cdate, 3): 24/06/09
    SELECT CONVERT(varchar(100), cdate, 4): 24.06.09
    SELECT CONVERT(varchar(100), cdate, 5): 24-06-09
    SELECT CONVERT(varchar(100), cdate, 6): 24 06 09
    SELECT CONVERT(varchar(100), cdate, 7): 06 24, 09
    SELECT CONVERT(varchar(100), cdate,: 10:57:46
    SELECT CONVERT(varchar(100), cdate, 9): 06 24 2009 21:57:46:827AM
    SELECT CONVERT(varchar(100), cdate, 10): 06-24-09
    SELECT CONVERT(varchar(100), cdate, 11): 09/06/24
    SELECT CONVERT(varchar(100), cdate, 12): 090624
    SELECT CONVERT(varchar(100), cdate, 13): 24 06 2009 21:57:46:937
    SELECT CONVERT(varchar(100), cdate, 14): 10:57:46:967
    SELECT CONVERT(varchar(100), cdate, 20): 2009-06-24 21:57:47
    SELECT CONVERT(varchar(100), cdate, 21): 2009-06-24 21:57:47.157
    SELECT CONVERT(varchar(100), cdate, 22): 06/24/09 21:57:47 PM
    SELECT CONVERT(varchar(100), cdate, 23): 2009-06-24
    SELECT CONVERT(varchar(100), cdate, 24): 10:57:47
    SELECT CONVERT(varchar(100), cdate, 25): 2009-06-24 21:57:47.250
    SELECT CONVERT(varchar(100), cdate, 100): 06 24 2009 21:57PM
    SELECT CONVERT(varchar(100), cdate, 101): 06/24/2009
    SELECT CONVERT(varchar(100), cdate, 102): 2009.06.24
    SELECT CONVERT(varchar(100), cdate, 103): 24/06/2009
    SELECT CONVERT(varchar(100), cdate, 104): 24.06.2009
    SELECT CONVERT(varchar(100), cdate, 105): 24-06-2009
    SELECT CONVERT(varchar(100), cdate, 106): 24 06 2009
    SELECT CONVERT(varchar(100), cdate, 107): 06 24, 2009
    SELECT CONVERT(varchar(100), cdate, 108): 10:57:49
    SELECT CONVERT(varchar(100), cdate, 109): 06 24 2009 21:57:49:437PM
    SELECT CONVERT(varchar(100), cdate, 110): 06-24-2009
    SELECT CONVERT(varchar(100), cdate, 111): 2009/06/24
    SELECT CONVERT(varchar(100), cdate, 112): 20090624
    SELECT CONVERT(varchar(100), cdate, 113): 24 06 2009 21:57:49:513
    SELECT CONVERT(varchar(100), cdate, 114): 10:57:49:547
    SELECT CONVERT(varchar(100), cdate, 120): 2009-06-24 21:57:49

    4,

    1.显示本月第一天

    SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
    select convert(datetime,convert(varchar(8),getdate(),
    120)+'01',120)

    2.显示本月最后一天

    select dateadd(day,-1,convert(datetime,convert
    (varchar(8),dateadd(month,1,getdate()),120)+'01',120))
    SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))


    3.上个月的最后一天

    SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))

    4.本月的第一个星期一i

    select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(
    day,getdate()),getdate())),0)


    5.本年的第一天

    SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)

    6.本年的最后一天

    SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))

    7.去年的最后一天

    SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))


    8.本季度的第一天

    SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)


    9.本周的星期一

    SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)


    10.查询本月的记录

    select * from tableName where DATEPART(mm, theDate)
    =DATEPART(mm, GETDATE()) and DATEPART(yy, theDate)
    = DATEPART(yy, GETDATE())

    11.查询本周的记录

    select * from tableName where DATEPART(wk, theDate) = DATEPART
    (wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

    12查询本季的记录 注:其中:GETDATE()是获得系统时间的函数。

    select * from tableName where DATEPART(qq, theDate) = DATEPART
    (qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

    13.获取当月总天数:

    select DATEDIFF(dd,getdate(),DATEADD
    (mm, 1, getdate()))

    select datediff(day,
    dateadd(mm, datediff(mm,'',getdate()), ''),
    dateadd(mm, datediff(mm,'',getdate()), '1900-02-01'))

    14.获取当前为星期几

    DATENAME(weekday, getdate())

  • 相关阅读:
    1
    vim配置
    pyspark
    添加底部小火箭+目录
    00
    博客园代码高亮设置
    01. 枚举类型
    01. 授权问题
    Android Studio打包签名全过程
    linux 阿里云源地址
  • 原文地址:https://www.cnblogs.com/hzpin/p/3926286.html
Copyright © 2020-2023  润新知