Server取datetime的日期部分,Server里面的SQL语句的不

在c#中有个Date属性用于返回日期,其实就是当天0点。

最近时间刚从客户端转入后台写服务,对于后台数据库以及服务的书写完全是个小白,所以最近写的肯定没有太多技术含量。

我的感觉是,Accees数据库虽然可以称得上是小型的关系型数据库,并且也是使用的结构化查询语言SQL,但它的语法(主要体现在函数上),却类似vbscript的语法,我想,这应该和Access属于Office系列有关,基于它的开发和应用,自然就与VBA扯上关系,因而Access的函数库也就是VBA的函数库,而非SQL函数库。下面,我们来具体看下Access和SQL Server在查询语句的编写上具体的不同。

DateTime dtNow = DateTime.Now;
DateTime dtNow2 = dtNow.Date;
Console.WriteLine("dtNow="   dtNow);
Console.WriteLine("dtNow2="   dtNow2);

首先把遇到的问题摆出来:还是那张错误上报表,字段主要有上报错误ID(ErrorID),上报人(ReportPerson),上报时间(ReportTime)精确到毫秒,现在要做的统计是:(1)统计一定时间内【起止时间精确到毫秒】(beginTime,endTime)每个人每天上报的错误个数(2)统计一定时间内【起止时间到精确到月】(beginTime,endTime)按月统计每个人上报的错误总数。

一、数据类型转换:

图片 1

看到问题首先想到的是要group by ReportPerson,能将每个人的统计数据计算出来,但是还没达到要求,还需要获得每个人每天的统计数据,对于我这样的菜鸟来说就有点麻烦了,不知道该怎么下手了,在sql群里找了个高手,告诉需要把规定一下时间格式,然后把时间格式限定到天和月,这两个问题就解决了。

  1. Access: SELECT '调查' CStr(Did) as diaocha FROM CZdengji
  2. SQL Server: select artid,'调查' Cast(listid As varchar) as did from kingart where artdate>=getdate()

那么SQL Server中有没有这个呢?开始百度,发现这个真没有!

上篇已经将多个时间函数罗列了出来,现在就本文章中用到的CAST 和 CONVERT详细介绍一下:

      Access中SQL查询的数据类型转换有很多函数,每一个函数都可以强制将一个表达式转换成某种特定数据类型。具体如下:CBool(expression) 、CByte(expression) 、CCur(expression) 、CDate(expression) 、CDbl(expression) 、CDec(expression) 、CInt(expression) 、CLng(expression) 、CSng(expression) 、CStr(expression) 、CVar(expression) 、CStr(expression),相信不用说明,大家也看得懂这各种转换符的意思。

但是方法还是有的,基本上是这两种:

先看一下他们的语法:

二、IIF函数(ACCESS专用)

1)直接转成varchar。

CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

  1. Access: SELECT Id,IIF(Isfinished=1,'已完成','进行中'),Name,Diaocharen FROM CZdiaocha ORDER BY Isfinished ASC
  2. SQL Server 的写法就相对更多,可以自定义函数,也可以使用case语句,如select Id,case Isfinished when 1 then '已完成'
    when 0 then '进行中'  end,Name,Diaocharen FROM CZdiaocha ORDER BY Isfinished ASC

2)把年月日取出来转varchar再拼接起来。

其中:

三、DISTINCT关键字用法: Access里面distinct(expression)的用法单一, expression 只能为指定字段,而不能为表达式,SQL Server则不同, expression 除了可以为单个字段,也可以为一个子查询等复杂表达式。

我一直使用第2种方法,写了个函数:

expression: 任何有效的表达式。
data_type: 目标数据类型。 这包括 xml、bigint 和 sql_variant。 不能使用别名数据类型。
length: 指定目标数据类型长度的可选整数。 默认值为 30。
style: 指定 CONVERT 函数如何转换 expression 的整数表达式。 如果样式为 NULL,则返回 NULL。 该范围是由 data_type 确定的。
和本文相关的主要是length和expression,length是指目标类型的长度,用于限制时间的精度,expression是用来限定输出时间的格式例如:yyyy/mm/dd/yyyy-mm-dd等。

四、日期格式化

Create function [dbo].[GetDateOnly]
(
    @d as datetime
)
returns smalldatetime
 AS
begin
    declare @OutputD smalldatetime;
    declare @y int=DATEPART(year, @d);
    declare @MH int=DATEPART(month, @d);
    declare @dy int=DATEPART(day, @d);
    declare @s varchar(50);
    set @s=convert(varchar(4),@y) '-' convert(varchar(2),@MH) '-' convert(varchar(2),@dy);
    set @OutputD=convert(smalldatetime,@s);
    return @OutputD;
end

express的相关的知识以及举例使用可参考下这篇博文:
//www.jb51.net/article/33330.htm

  1. Access: 使用format()函数,SELECT TOP 5 arttitle,format(artdate,'YY-MM-DD') as arttime FROM kingart WHERE listid=9,这里使用format()函数,指定artdate(日期型)查询出来的格式为YY-MM-DD。
  2. SQL Server: 使用convert()函数,select Id,lanmu,title,content, convert(varchar(10),updatetime ,120) as update_time from news,这里的120,是指定格式为YY-MM-DD,如果是其他数字(101-120),就是其他的格式。

然而今天查看msdn官方文档,发现SQL Server中还有个date类型

现在就用这些知识解决我的我的问题,首先是按日统计上报量,精确到日 时间限制为:CONVERT(varchar(11) , ReportTime , 20 ) 即yyyy-mm-dd
然后利用group by 问题就得到了解决,sql 代码为:

其它一些常用的SQL语句集锦

 

复制代码 代码如下:

  1. SELECT Top 5 * From Food WHERE Fid not in(Select top 5 Fid FROM Food) //查询第5到第10条记录
  2. delete from Food where charindex('2007',uptime)>0 or charindex('2008', uptime )>0  //删除Food表中uptime列包含有2007或2008的记录,即删除时间为2007年和2008年的更新记录

  3. select Id,lanmu,title,content, convert(varchar(10),updatetime ,120) as update_time from news  // SQL Server里面的convert函数,转换成 varchar(10)类型, 120为指定转换后的格式。

  4. select Mealtype as 餐别,Fname as 食物名称,sum(rjjingshisz)/2 as 人均净食生重总和 from CZdengji WHERE Did=6 group by Mealtype,Fname    //分组查询,GROUP BY的本意就是重复的字段合为一,对应的信息,进行汇总(count、sum等运算)

  5. Select Count(ID) from Flow where convert(varchar(21),visittime,120) like '2007-01-26% ' ,日期型数据模糊查询。

  6. select * from ('MSDASQL','DRIVER={SQL Server};SERVER=服务器名字;UID=对端数据库的账号;PWD=对端密码', 对端数据库.权限者.对端的表) as 表   //跨服务器查询

图片 2

select ReportPerson,CONVERT(varchar(11) , ReportTime , 20 ) as 'ReporTime', count(*) as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-15 12:11:12.23')and (ReportTime<'2013-1-16 12:11:12.23') group by ReportPerson,CONVERT(varchar(11) , ReportTime , 20 )

您可能感兴趣的文章:

  • SQL Server中的数据复制到的Access中的函数
  • Access转Sql Server问题 实例说明
  • Sql Server、Access数据排名的实现方法(例如:成绩排名)
  • SQLServer与Access常用SQL函数区别
  • SQL 随机查询 包括(sqlserver,mysql,access等)
  • 在ACCESS和SQL Server下Like 日期类型查询区别
  • asp.net下Oracle,SQL Server,Access万能数据库通用类
  • SQL SERVER 与ACCESS、EXCEL的数据转换方法分享
  • 将Access数据库中数据导入到SQL Server中的详细方法实例
  • 八步解决ACCESS自动编号问题(将SQL SERVER 2000数据库,转换为ACCESS数据库)
  • 将ACCESS数据库迁移到SQLSERVER数据库两种方法(图文详解)
  • sqlserver,sqlite,access数据库链接字符串整理
  • 自己动手把ACCESS转换到SQLSERVER的方法
  • Access 导入到SQL Server 2005的方法小结
  • JavaScript使用ActiveXObject访问Access和SQL Server数据库
  • SQL Server数据复制到的Access两步走

这不就是想要的日期吗?

执行结果为:

select convert(date,getdate())
select convert(date,'2016-11-5 12:20:45.567')

图片 3

还有一个问题是按月统计每个人上报错误量的统计,只要将时间日期限定到月就好了,即:CONVERT(varchar(7) , ReportTime , 20 ) yyyy-mm 执行sql语句为:

复制代码 代码如下:

select ReportPerson,CONVERT(varchar(7) , ReportTime , 20 ) as 'ReportTime', count(*) as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-1')and (ReportTime<'2013-2-1') group by ReportPerson,CONVERT(varchar(7) , ReportTime , 20 )

执行结果为:

图片 4

好了,今天就到此为止吧,如果哪位大师有更好的方法,欢迎留言!!!

您可能感兴趣的文章:

  • SQLserver中用convert函数转换日期格式的方法
  • SqlServer中的日期与时间函数
  • Sqlserver 常用日期时间函数
  • PHP模拟SQL Server的两个日期处理函数
  • SQL Server 比较日期大小的方法
  • SQLServer2005 按照日期自动备份的方法
  • sql server日期相减 的实现详解
  • SQL Server日期计算
  • 模拟SQLSERVER的两个函数:dateadd(),datediff()
  • sqlserver中获取当前日期的午夜的时间值的实现方法
  • SQL Server各种日期计算方法(收藏)
  • SQL Server日期加减函数DATEDIFF与DATEADD用法分析

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:Server取datetime的日期部分,Server里面的SQL语句的不

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。