SQL Server 中几个有用的特殊函数
在SQL Server 的使用过程中,发现几个很有用,但不太常用(或细节不太清楚)的函数(存储过程):
遂记下,以备日后查询。不敢独享,与君共之。有用且看,无用略过。
1> isnumeric( expression )
数值类型包括(int、bigint、smallint、tinyint、numeric、money、smallmoney、float、decimal、real)
示例:
select * from tablename
where isnumeric(columnname)<> 1;
go
2> isdate( expression )
示例:
if isdate('2009-05-12 10:19:41.177') = 1
print '有效的日期'
else
print '无效的日期'
3> patindex( '%pattern%' , expression )
-- 如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
示例:
select patindex('%BB%','AA_BB_CC_DD_AA_BB_CC_DD')
-- 返回:4
上面示例返回的是第一个‘BB’的开始位置。
其实,使用 charindex 函数也能实现上面示例的查询,如下:
select charindex('BB','AA_BB_CC_DD_AA_BB_CC_DD')
--返回:4
select patindex('%[0-9][A-Z]%', 'AA_BB_9C_DD_AA_9F_CC_DD')
-- 返回:7
select charindex('%[0-9][A-Z]%','AA_BB_9C_DD_AA_9F_CC_DD')
-- 返回:0
看出来没有?patindex 函数可以使用通配符,而charindex 函数不能。也就是说:patindex 函数功能更强大!
4> newid( )
示例:
declare @myid uniqueidentifier
set @myid = newid()
print '@myid 的值是: '+ convert(varchar(255), @myid) -- @myid 的值是: 0B939411-4827-485E-884B-5BEB1699CFEE
5> collate
示例:
drop table #tempTalbe
go
create table #tempTalbe
(
_id int,
_name varchar(30)
)
go
insert into #tempTalbe values(1,'中');
insert into #tempTalbe values(2,'国');
insert into #tempTalbe values(3,'人'); select * from #tempTalbe
order by _name
collate latin1_general_cs_as_ks_ws asc;
go
/* 显示结果:
_id _name
----------- ------------------------------
1 中
2 国
3 人
*/ select * from #tempTalbe
order by _name
collate Chinese_PRC_CS_AS_KS_WS asc;
go
/* 显示结果:
_id _name
----------- ------------------------------
2 国
3 人
1 中
*/
可以执行系统函数 fn_helpcollations 来检索 Windows 排序规则和 SQL Server 排序规则的所有有效排序规则名称的列表:
select * from fn_helpcollations()
由于此存储过程支持参数替换,因此 sp_executesql 比 execute 的功能更多;
由于 sql server 更可能重用 sp_executesql 生成的执行计划,因此 sp_executesql 比 execute 更有效。
示例:
create table #tb_suer( id int)
go
insert into #tb_suer values(1234)
go declare @tbname nvarchar(20)
declare @sql nvarchar(500)
set @tbname='#tb_suer'
set @sql='select * from ' + @tbname
execute sp_executesql @sql
/* 结果:
id
-----------
1234
*/上面示例演示了SQL语句的拼接。
-- 返回按照表的某一行或一组表达式计算出来的校验和值。 checksum 用于生成哈希索引。
* 指定对表的所有列进行计算。如果有任一列是非可比数据类型,则 checksum 返回错误。
非可比数据类型有 text、ntext、image、xml 和 cursor,还包括以上述任一类型作为基类型的 sql_variant。
expression 除非可比数据类型之外的任何类型的表达式。
示例:
-- 找出在T1有,T表没有的记录。
select * from t1 where checksum(*) not in ( select checksum(*) from t )
上面示例,等于是把t1表里的一行数据hash和t表一行数据hash后相比,就是说两个表里有没有行完全相当的。
http://blog.csdn.net/qq_25627143/article/details/50646405
SQL Server 中几个有用的特殊函数的更多相关文章
- 如何解决 SQL Server 中的锁升级所致的阻塞问题
概要 锁升级为表锁插入转换很多细粒度的锁 (如行或页锁) 的过程.Microsoft SQL Server 动态确定何时执行锁升级.作出决定之前,SQL Server 将特定的扫描,整个事务,并且用于 ...
- SQL Server中一些有用的日期sql语句
SQL Server中一些有用的日期sql语句 1.一个月第一天的 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一 SELECT DA ...
- SQL Server中的事务与锁
了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...
- SQL Server中的事物
1.事务的四个属性 原子性Atomicity,一致性Consistency,隔离性Isolation,持久性Durability ,即ACID特性. 原子性:事务必须是一个完整工作的单元,要么全部执行 ...
- 【转】SQL Server中的事务与锁
SQL Server中的事务与锁 了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂 ...
- SQL Server中关于跟踪(Trace)那点事
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...
- SQL Server中的索引
1 SQL Server中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(B 树)中,使 SQL Serve ...
- 【转】SQL Server中关于跟踪(Trace)那点事
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...
- SQL Server中的SQL语句优化与效率问题
很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: select * from table1 where name='zhan ...
随机推荐
- 2653: middle
2653: middle 链接 分析: 二分答案+主席树. 对于中位数的经典做法,就是二分一个数,将小于的变成-1,大于等于的变成+1,那么如果sum>=0(因为+1包括等于),L=mid+1, ...
- 最新版CocoaPods的安装和使用以及版本升级遇到的问题
CocoaPods的下载及安装 mac系统已经默认安装好Ruby环境,如果你不确定自己系统中是否有Ruby的,可以在终端中输入命令行:ruby -v查看当前ruby版本.如图: 确定以后,接下来就可 ...
- 为什么volatile不能保证原子性?
为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档是这样形容vola ...
- C语言编译过程以及gcc编译参数
1.1 C语言编译过程,gcc参数简介 1.1.1 C语言编译过程 一.gcc - o a a.c -o:指定文件输出名字 二.C语言编译的过程: 1.1.1 ...
- c#_导出table功能
一:第一张导出方法,简单快捷 请注意:一般表格都有真分页,查询数据时候注意把分页条件去掉#region 此处是获取的list数组 然后转table再调用ExportExcel var list=&qu ...
- 常见面试算法题JS实现-仅用递归函数和栈操作逆序一个栈
前言: 因为JAVA和JS语言特性的不同,有些东西在JAVA中可能需要一些技巧和手段才能实现的复杂程序,但是在JS中可能就是天然存在的,所以这套书里面的题目不会全部用JS去实现一遍,因为可能JS的实现 ...
- 大话 .Net 之内存管理
在一次偶然的机会中,我来到了恒生的大家庭.又在一次偶然的机会中,我很荣幸的被勇哥信任并让我写一篇季刊的文章.可能人生之中充满了无数次的偶然机会,我们只有抓住眼前的“偶然”,才可以创建人生.当我接到这个 ...
- 第四节:Windows系统安装时BIOS设置及注意
BIOS系统 BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统".在IBM PC兼容系统上 ...
- 【日常训练】Help Chef Gerasim(Codeforces 99B)
题意与分析 需要注意非法情况.换言之,合法情况其实很苛刻. 代码 /* * ACM Code => cf99b.java * Written by Sam X * Date: 三月, 19, 2 ...
- 树莓派修改VNC分辨率
1.打开终端输入 sudo raspi-config 2. 选择 Advanced Options 再选择 Resolution 3.选择想要的分辨率,确定 4.重启