关于SQL seversql count 1 函数函数

SqlServer中的null值与IsNull函数_信息技术中心
NULL 值的三大特点,分别是:1)NULL值不参加统计;2)NULL值不进入计算表达式;3)不能与其它值进行比较。
所谓NULL值不参加统计 即 在使用统计函数时,凡是涉及到 NULL值的都会被忽视掉(用词可能不准确),不要以为这不重要,其实在某些地方这是很重要的。而 NULL值不进入计算也就是说在进行数据之间的统计计算时,若有为 NULL值的项,那么它是不进入即不参加计算的。这也是一个不容忽视的问题。这即使在生活中也是常见的。就好比如说一个人的奖金为NULL值(没有录入数据或其它的原因,不做探讨),而他的基本工资总不会为 0 吧?!(如果为0,早就被T了),月末算总工资的时候把基本工资加上奖金,而若是奖金为 NULL值,总工资 = 基本工资 + 奖金(NULL),那么当此种情况发生时,总工资 = 基本工资 ?
&&&& 肯定的回答是:不等于。因为奖金为 NULL值,NULL值代表具体的什么值?都不知道。而不知道NULL值到底是多少,那么又怎么能进行计算呢?所以总工资等于 NULL 的,也是不确定的。这样,还有员工敢在公司吗?万一你来个总工资的 NULL 为真的空了,那还做什么工作啊?!这就涉及到一个强制转换的问题,即把 NULL值强制转换为 0 ,让其具备业务意义。而强制转换的关键字就是 IS ,语法即 IS NULL;这样就可以进行涉及 NULL值的计算了。
不过 NULL值也不是对所有的统计函数都有影响。一般来说。统计平均值(AVG)时, NULL值是一定会有影响的;统计最小值(MIN)时, NULL值是可能会对 MIN 有影响,在我认为是有点随机性质;统计最大值(MAX)或统计和(NULL)时,NULL值是对其完全没有影响的。
所以又有一种说法是:null值不参加统计,不参加计算,只能用is判断。
判断Null值语句:select * from 表 where 字段
转换null值语句:select 字段1,字段2,字段3,is null(字段3,’某个值’) from 表;
总之,我们要认真对待 NULL值,最好在使用统计函数时,都加上 IS NULL,以防意外出现。
sqlserver 中isnull的用法一例
数据库中有一列记录文章的访问次数。我现在要实现的功能是,每刷新一次页面。 访问次数+1。sql语句,art_count为访问次数,int类型。 update article set art_count="(art_count+1) where art_id="3 但如果art_count为NULL,则不起作用。 如果是oracle用decode可以很容易的实现此功能。sqlserver中如何实现类似的功能呢? sqlserver中有一个函数isnull,此函数有两个参数isnull(p1,p2)其用法是如果p1为null,则用p2代替。 此函数类似oracle的nvl。例如 SELECT AVG(ISNULL(price, $10.00)) FROM titles 受到此函数的启发我这样写的sql语句 update article set art_count="(isnull(vote_count,0)+1) where art_id="3&"SQL&Server&内置函数
SQL Server
select @@servername
Server@@servernamesp_addserversp_dropserver
serverpropertyservername
select serverproperty('servername')
select getdate()
SQL Server
select datepart(dy,getdate())
select dateadd(hh,1,getdate())
select datediff(d,'
select getdate()
select convert(varchar,getdate(),101)
select convert(varchar,getdate(),111)
select ceiling(12.34),ceiling(-12.34)
select rand()
select convert(int,rand()*3+1)
select round(748.53,0),round(748.53,1)
select round(748.53,-2),round(748.53,-1)
select object_id('master.sys.databases')
select object_name(id)
from master.sys.sysobjects where id=-213
select object_definition(object_id('master.sys.sp_who2'))
Transact-SQL
select is_member('dbo')
select is_srvrolemember('sysadmin')
SQL Server
SQL Server
select has_perms_by_name(null,null,'view
server state')
VIEW SERVER
select has_perms_by_name('Tom','login','impersonate')
IMPERSONATE
user='Tom'
select has_perms_by_name('master.sys.databases','object','select')
master.sys.databases
select char(65),char(97)
select charindex('abc','abcdefgabc',5)
select len('abc&&
select replicate('xy',10)
select datalength(rtrim('abc&&
datalength()
select substring('abcdeft',3,2)
select SpecialOfferID,MinQty,MaxQty,isnull(MaxQty,9999)
as MaxQty2
&&&&&&&&&from
AdventureWorks.Sales.SpecialOffer
select @@rowcount,rowcount_big()
ROWCOUNT_BIG
sys.dm_db_index_physical_stats(null,null,null,null,null)
select @@total_errors,@@total_read,@@total_write
SQL Server
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。SQL SERVER的ROWCOUNT关键字-SQL技巧
||||||||||||
当前位置 &
Tag:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
SQL SERVER的ROWCOUNT关键字
发表日期:
因为仰望,所以一直都以为SQL SERVER很笨。
据传SQL 2005有了RowID的东西,可以解决TOP排序的问题。可惜还没有机会体验。在SQL 2000中写,总会遇到需要TOP的地方,而一旦遇到TOP,因为没办法把TOP后面的数字作为变量写到预编译的语句中去,所以只能够使用构造SQL,使用Exec来执行。不说效率的问题,心里也总觉得这个办法很笨。
实际上,在SQL 2000中完全可以使用ROWCOUNT关键字解决这个问题。
ROWCOUNT关键字的用法在联机帮助中有比较详细的说明,这儿就不罗嗦了。谈谈体会。
1、使用ROWCOUNT查询前几行结果。
DECLARE @n INTSET @n = 1000SET ROWCOUNT @nSELECT * FROM Table_1&
&这样,查询结果将等同于
SELECT TOP 100 FROM Table_1
2、同样的道理,使用INSERT INTO..SELECT的时候也有效。
DECLARE @n INTSET @n = 1000SET ROWCOUNT @nINSERT INTO Table_2 (colname1)SELECT colname1=colname2 FROM Table_1
执行的结果将等同于
INSERT INTO Table_2(colname1)SELECT TOP 1000 colname1 = colname2 FROM Table_1
3、执行UPDATE和DELETE。
因为UPDATE和DELETE无法直接使用ORDER BY语法,如果使用ROWCOUNT,将按照主键顺序从前往后操作。
DECLARE @n INTSET @n = 1000SET ROWCOUNT @nDELETE FROM Table_1
不过也有解决办法,只要能够使用ORDER BY关键字就可以了,比如说直接用含ORDER BY的子句,或者先使用ORDER BY语法把需要操作的标识列存为一个临时表或表变量,然后再操作语句中使用IN或EXISTS关键字。
DECLARE @n INTSET @n = 1000SET ROWCOUNT @nDECLARE @t TABLE(ID INT)INSERT INTO @tSELECT ID FROM Table_1 ORDER BY colname [ASC/DESC]
DELETE FROM& Table_1 WHERE ID IN (SELECT ID FROM @t)
4、对于ROWCOUNT的设置是与有关的。如果占用了一个Session,那么对应的这个Session将使用最近一次设置的ROWCOUNT,直到Session结束或者修改了ROWCOUNT。
5、在用户自定义函数中不能使用ROWCOUNT。
6、取消ROWCOUNT。
我不知道为什么在联机帮助中说,写存储过程的时候应该注意尽量避免使用ROWCOUNT,而建议使用TOP。难道MS不知道TOP关键后面的数字不能为变量吗?也许MS是出于担心开发者忘记了取消ROWCOUNT而影响正常的实现。
使用这样的语句即可取消ROWCOUNT了。
SET ROWCOUNT 0
使用ROWCOUNT之后可以很方便的解决TOP关键字不能带变量的问题,这样,对于需要排序取值的问题就比较容易解决了。避免了使用EXEC来执行构造SQL语句,调试存储过程的时候也要方便很多。唯一不方便的是,没有找到获取当前ROWCOUNT值的办法,但仔细想来,得到这个值的用处也并不大。
上一篇: (人气:8629)
下一篇:(人气:7570)
教程搜索服务
本月文章推荐
项目外包信息
数据教程文章分类
站长工具:
实用工具:
Copyright &
All rights reserved | 沪ICP备号如下表:AggregationTable
如果想得到下图的聚合结果
利用SUM、AVG、COUNT、COUNT(*)、MAX 和 MI
如下表:AggregationTable
如果想得到下图的聚合结果
利用SUM、AVG、COUNT、COUNT(*)、MAX 和 MIN是无法做到的。因为这些都是对数值的聚合。不过我们可以通过自定义函数的方式来解决这个问题。1.首先建立测试表,并插入测试数据: 复制代码 代码如下:create table AggregationTable(Id int, [Name] varchar(10)) go insert into AggregationTable
select 1,'赵' union all
select 2,'钱' union all
select 1,'孙' union all
select 1,'李' union all
select 2,'周' go2.创建自定义字符串聚合函数复制代码 代码如下:Create FUNCTION AggregateString (
@Id int ) RETURNS varchar(1024) AS BEGIN
declare @Str varchar(1024)
set @Str = ''
select @Str = @Str + [Name] from AggregationTable
where [Id] = @Id
return @Str END GO3.执行下面的语句,并查看结果 复制代码 代码如下:select dbo.AggregateString(Id),Id from AggregationTable group by IdSQLSERVER常用查询聚合函数与GROUP本文档内容具体实用,知识点,重点,难点..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
SQLSERVER常用查询聚合函数与GROUP
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 sqlserver日期函数 的文章

 

随机推荐