来自 数据库 2020-04-30 11:36 的文章
当前位置: 网上澳门金莎娱乐 > 数据库 > 正文

sql server中部分函数功能详解

最近时间刚从客户端转入后台写服务,对于后台数据库以及服务的书写完全是个小白,所以最近写的肯定没有太多技术含量。 首先把遇到的问题摆出来:还是那张错误上报表,字段主要有上报错误ID,上报人,上报时间精确到毫秒,现在要做的统计是:统计一定时间内(beginTime,endTime)每个人每天上报的错误个数统计一定时间内按月统计每个人上报的错误总数。 看到问题首先想到的是要group by ReportPerson,能将每个人的统计数据计算出来,但是还没达到要求,还需要获得每个人每天的统计数据,对于我这样的菜鸟来说就有点麻烦了,不知道该怎么下手了,在sql群里找了个高手,告诉需要把规定一下时间格式,然后把时间格式限定到天和月,这两个问题就解决了。 上篇已经将多个时间函数罗列了出来,现在就本文章中用到的CAST 和 CONVERT详细介绍一下: 先看一下他们的语法: CAST ( expression AS data_type [ ( length ) ] ) CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 其中: 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等。 express的相关的知识以及举例使用可参考下这篇博文: // 现在就用这些知识解决我的我的问题,首先是按日统计上报量,精确到日 时间限制为:CONVERT(varchar(11) , ReportTime , 20 ) 即yyyy-mm-dd 然后利用group by 问题就得到了解决,sql 代码为: 复制代码 代码如下: 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 ) 执行结果为: 还有一个问题是按月统计每个人上报错误量的统计,只要将时间日期限定到月就好了,即: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 ) 执行结果为: 好了,今天就到此为止吧,如果哪位大师有更好的方法,欢迎留言!!!

1.TOP 子句

TOP 子句用于规定要返回的记录的数目。

对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。

SQL Server 的语法:

SELECT TOP number|percent column_name(s)

FROM table_name

 

2.’%%’查询

我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons

WHERE City LIKE '[ALN]%'

3. IN 操作符实例

现在,我们希望从上表中选取姓氏为 Adams 和 Carter 的人:

我们可以使用下面的 SELECT 语句:

SELECT * FROM Persons

WHERE LastName IN ('Adams','Carter')

4. LEN() 函数

LEN 函数返回文本字段中值的长度。

SQL LEN() 语法

SELECT LEN(column_name) FROM table_name

5. ROW_NUMBER()OVER()函数

ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

6. ROUND 函数

用于把数值字段舍入为指定的小数位数。

语法

ROUND ( numeric_expression , length [ , function ] )

参数

numeric_expression

精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。

length是 numeric_expression 将要四舍五入的精度。length 必须是 tinyint、smallint 或int。当 length 为正数时,numeric_expression 四舍五入为 length 所指定的小数位数。当 length 为负数时,numeric_expression 则按 length 所指定的在小数点的左边四舍五入。

7.HAVING 子句

在 SQL 中增加 HAVING 子句原因是WHERE 关键字无法与合计函数一起使用。

SQL HAVING 语法

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

HAVING aggregate_function(column_name) operator value

Having 只用于查询条件中有合计函数的。

8. ISNULL函数

(1)ISNULL
使用指定的替换值替换 NULL。
语法
ISNULL ( check_expression , replacement_value )

这里isnull用于查询字段里

(2)

case when isnull(b.c_delivery_type,'')='' then  b.c_delivery_type else a.c_delivery_type end  as 物流方式

 

null是特殊的值,他不能被进行比较,所以=<>等这些符号是不能判断null的,所以isnull(字段名,'')='',把null转换成'',再和''比较,而字段名='',由于没有处理null的情况,所以如果字段有null值,将被忽略

9.union 用法

分为union与union all
union 缺省在合并结果集后消除重复项,

union all 指定在合并结果集后保留重复项,
打个比喻吧 比如A表的数据是 A{ 1,4,5,9}       B{2,3,4,5}
那我执行此语句 select * from A union select * from B 那结果是{1,2,3,4,5,9}
如果执行select * from A union all select * from B 结果是{1,2,3,4,4,5,5,9}

10. DateDiff()

DATEDIFF 函数计算指定的两个日期中第二个日期与第一个日期的时间差的日期部分。换句话说,它得 出两个日期之间的间隔。结果是等于 date2 - date1 的日期部分的带符号整数值。

表达式DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])

允许数据类型: timeinterval 表示相隔时间的类型,代码为:

年份 yy、yyyy 季度 qq、q

网上澳门金莎娱乐,月份 mm、m

每年的某一日 dy、y

日期 dd、d

星期 wk、ww

工作日 dw

小时 hh

分钟 mi、n

秒 ss、s

毫秒 ms

11. datepart()函数

DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

DATEPART(datepart,date)

date 参数是合法的日期表达式。datepart 参数可以是下列的值:

datepart

缩写

yy, yyyy

季度

qq, q

mm, m

年中的日

dy, y

dd, d

wk, ww

星期

dw, w

小时

hh

分钟

mi, n

ss, s

毫秒

ms

微妙

mcs

纳秒

ns

 

12. join函数

sql之left join、right join、inner join的区别

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

本文由网上澳门金莎娱乐发布于数据库,转载请注明出处:sql server中部分函数功能详解

关键词: