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

时间:2022-12-29 17:46:08

(一)

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,sql语句 关于日期时间、类型转换的东西: 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())

sql语句 关于日期时间、类型转换的东西的更多相关文章

  1. sql语句中日期时间格式化查询

          今天在做会员管理系统搜索时,我发现以前的搜索时间方式不太科学,效率也不是太高.由其是在查询指定的时间相等的时候,我在数据库中都存这样的时间格式"2007-5-22 14:32:1 ...

  2. 使用sql语句查询日期在一定时间内的数据

    使用sql语句查询日期在一周内的数据 select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0   //查询当天日期在一周年 ...

  3. SQL语句中日期的计算方法大全

    sql语句中的日期处理一.日期處理函數1.日期增減函數 dateadd(datepart,number,dtae) datepart:是規定應向日期的哪一部分返回新值的參數.下列是sql server ...

  4. sql语句执行的时间

    统计mysql里每条SQL语句执行的时间 收藏 CrazyHarry 发表于 2年前 阅读 3785 收藏 8 点赞 3 评论 3 Google.Github 双重认证前端课程,独家硅谷内容,每周直播 ...

  5. 使用SQL语句查询日期&lpar;当月天数&comma;当月第一天&comma;当月最后一天&comma;本年最后一天&comma;当月第一个星期&rpar; 日期转字符串

    取某月天数:,) --当月天数 ,DATEADD(m, DATEDIFF(m,,getdate())+,))) ---当月第一天 ,getdate()) ---当月最后一天 ,dateadd(m,,d ...

  6. Sql Server中日期时间格式化为字符串输出

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  7. MySQL 动态sql语句运行 用时间做表名

    1. 描写叙述 在使用数据的时候,我时候我们须要非常多数据库,并且想用时间来做表名以区分.可是MySQL在存储过程中不支持使用变量名来做表名或者列名. 比方,有一个表我们想以"2015-07 ...

  8. SQL中的日期时间函数

    之所以把日期时间函数单独拿出来回顾一下,是因为这一部分的内容比较独立,C#中也有类似的日期时间函数,趁着想得起来,写个标题先.

  9. MySQL sql语句获取当前日期&vert;时间&vert;时间戳

    1.1 获得当前日期+时间(date + time)函数:now() mysql> select now();+———————+| now() |+———————+| 2013-04-08 20 ...

随机推荐

  1. linux 录制并回放终端会话

    发现一个比较好玩的命令,然后这块做一下记录 以下内容复制来源于 LINUX shell 脚本攻略第二版 当你需要为别人在终端上演示某些操作或是需要准备一个命令行教程时,通常得一边手动输入命令一边演示, ...

  2. Microsoft Visual C&plus;&plus; Compiler for Python 2&period;7

    Extest.c文件:#include <stdio.h> #include <stdlib.h>#include <string.h>#include &quot ...

  3. 单个input框上传多个文件操作

    HTML页面: <div class="form-group thumb"> <label class="control-label col-xs-12 ...

  4. T-SQL事务实例

    begin try begin tran ,'); ; --RAISERROR ('Error raised in TRY block.',16,1); commit tran end try beg ...

  5. 配置SecureCRT连接Linux CentOS

    链接地址:http://f.dataguru.cn/thread-144513-1-1.html 环境:Linux:centos5.8虚拟机:VirtualBox本机:windows至于怎么安装Cen ...

  6. Atom使用插件精选

    小颖之前公司的大哥推荐小颖用的编辑器是atom,之前都是他给小颖了一个atom插件安装列表,小颖电脑出了点问题,所以后来小颖把那弄丢了,小颖重装atom后,就不知道要安装什么插件,所以也百度了很多,今 ...

  7. redis中的&quot&semi;HashMap&quot&semi;

    redis是一个存储键值对的内存数据库,其存储键值的方式和java中的HashMap相似. 表征redis数据库的结构体是redisDb (在server.h文件中),redis服务器默认有16个数据 ...

  8. Hadoop分布式文件系统:架构和设计

    原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html 引言 前提和设计目标 硬件错误 流式数据访问 大规模数据集 简单的一致性模型 ...

  9. canvas学习笔记1

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. JAVA中正则表达式学习总结

    一.JAVA中正则表达式相关的类 1. java.util.regex.Pattern 该类用于编译模式,模式可以理解为一个正则表达式,比如:a*b. 用法如下: // 创建模式 Pattern p ...