??xml version="1.0" encoding="utf-8" standalone="yes"?> 我们l常?x)有q样的需求,x照地区来分别取出每个地区排名?的那些记录。本文ȝ了几U方法,希望大家补充?/span> 首先Q创建测试用的表和数据,如下Q?/span> create table test ( areaid int, score int ) insert into test select 0,10 union all select 0,20 union all select 0,30 union all select 0,40 union all select 0,50 union all select 1,10 union all select 1,20 union all select 1,30 union all select 1,40 union all select 1,50 union all select 2,10 union all select 2,20 union all select 2,30 union all select 2,40 union all select 2,50 go W一U方法适用于sql2000?005Q其代码如下Q?/span> select * from test a where checksum(*) in (select top 3 checksum(*) from test b where a.areaid=b.areaid order by score desc) W二U方法是利用sql2005的函数ROW_NUMBERQ其代码如下Q?/span> WITH test1 AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY areaid ORDER BY score desc) AS 'RowNumber' FROM test ) SELECT * FROM test1 WHERE RowNumber BETWEEN 1 AND 3; W三U方法是利用sql2005?span>cross apply来实玎ͼ其代码如下:(x) select distinct t.* from test a cross apply (select top 3 areaid,score from test where a.areaid=areaid order by score desc) as T http://www.cnblogs.com/smjack/archive/2010/02/23/1671943.html 分区的意义在于将大数据从物理上切割ؓ(f)几个怺独立的小部分Q从而在查询时只取出其中一个或几个分区Q减媄响的数据Q另外对于置于不同文件组的分区,q行查询的性能也要高于Ҏ(gu)个表的查询性能?/p>
事实上,在SQL Server 2005中就已经包含了分区功能,甚至?005之前Q还存在一个叫?#8220;Partitioned Views”的功能,能通过同L(fng)构的表Union在一个View中,实现cM现在分区表的效果。而在SQL Server 2008中,分区功能得到了显著加强,使得我们不仅能够对表和烦引做分区Q?a target="_blank">而且允许对分Z锁,而不是之前的全表上锁?/p>
和Compression一P在SQL Server 2008中也提供了分区的向导界面。在企业理器中Q需要分区的表上右键选择Storage-》Create Partition: q里?x)列表所有的字段Q包括字D늱型、长度、精度及(qing)数位数的信息,可以选择其中的Q意一一列作为分区列QPatitioning ColumnQ,不仅仅是数字或者日期类型,即是字W串cd的列Q也可以按照字母序q行分区。而以下类型的列不可用于分区:(x)text、ntext、image、xml、timestamp、varchar(max)、nvarchar(max)、varbinary(max)、别名、hierarchyid、空间烦引或 CLR 用户定义的数据类?/strong>。此外,如果使用计算列作为分区列Q则必须该?strong>设ؓ(f)持久化列QPersisitQ?/p>
在列表下方,提供了两个选项Q?/p>
注意Q这里徏?strong>使用聚集索引列作为分区列。一斚w索引l构本n应与查询相养I那么分区列与索引一致会(x)保证查询的最大效率;另一斚wQ保证烦引对齐而且是聚集烦引对齐是保证分区的移入移出操作顺畅的前提Q否则可能会(x)出现无法UdUd的情况,而分区的UdUd又是理大数据的重要{略—?strong>滑动H口QSlideWindowQ策略的基础操作。另外,如果要进行烦引对齐,需要所有烦引和表的压羃模式一?/strong>?/p>
选好分区列后Q如果没有应?#8220;分配到可用分”选项Q接下来则会(x)q入选择\创徏分区函数以及(qing)分区Ҏ(gu)的界面。其中分区函C(x)指定分区边界Q而分区方案则规划了每个分区所存储的文件组?/p>
向导操作界面如下Q?/p>
其中Left boundary说明每个分区的边界D包含在边界值左侧的分区中,也就是每个分区内的数据约束是<=指定的边界?/strong>Q相应的QRight boundary则说明每个分区的边界D包含在边界值右侧的分区中,每个分区内的数据U束?strong><指定的边界?/strong>?/p>
在下方的列表中,列出了当前分区方案下现有的分区。其中文件组QF(tun)ilegroupQ指定了每个分区存放的位|,如果分区放|于位于不同盘中的不同文gl中Q由于不同磁盘的d互不q扰Q这提高分q行处理的效率。一般情况下Q将所有分区放|在同一个文件组是比较稳妥的做法。关于文件组的展开阅读可以参阅Q?a target="_blank">SQL Server Filegroups?/p>
注意Q在q里最后一个分区是没有指定边界的,用于保存所?gt;(Left Boundary)?gt;=(Right boundary)最后一个分界的数据?/p>
如果选择旉cd的字D作为分区列Q可以通过Set按钮实现按条件分l:(x) q样可以很方便得通过讄h旉表按照指定旉D自动分区,但之后依焉要手动指定每个分区的文gl?/p>
制定好分区方案之后可以通过Estimate sotrage预估每个分区的行数、空间占用情况,不过除非需要以占用I间或行数来规划你的分区{略Q一?strong>不徏议在q里q行预估 通过以上讄Q分区已l基本完毕,在向导的最后,可以选择是创本还是立x行分区操作?/p>
我们可以查看在不同情况下创徏分区的脚本的情况Q?/p>
1.在表没有索引的情况下Q?/strong> q里先创建Partition Function以及(qing)Partition SchemeQ之后在分区列上创徏聚集索引q按照分区方案分区,最后删除了q一索引?lt;/> 2.在表有烦引的情况下:(x) 如果原先没有聚集索引Q?/p>
q和没有索引的情况一P如果表原先存在聚集烦引,则脚本变为:(x) 可以看到原有的聚集烦引(IX_idQ在分区Ҏ(gu)上被重徏了?/p>
如果选择?#8220;寚w索引”选项Q则?x)对所有烦引都应用分区Q?/p>
q里不仅对聚集烦引IX_idq行了分区,也对非聚集烦引UIX_name和UIX_birthdayq行了分区?/p>
׃我在实际操作中主要考虑q行查询斚w的效率,所以文章里只是略略带过Q但评论中有人提刎ͼ所以摘录整理一些资料在下面Q?/p>
解决办法Q?/p>
修改服务器的注册表:(x) HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/4.0/Engines/Excel 下双d边的"TypeGuessRows"选项Q将"数值数?Ҏ(gu)0?原因是:(x)excel表的数据导入数据库的时候,Jet引擎Ҏ(gu)"TypeGuessRows"选项的值所代表的行数判断内容的数据cdQ默认是Ҏ(gu)?行的内容判断数据cdQ修Ҏ(gu)0后,它会(x)Ҏ(gu)行的内容q行判断Q不q这样做?x)媄响性能?br>
]]>
exec sp_addlinkedserver @server='testDatabase',@srvproduct='SQL Server';
--l本地创建登录链?br />exec sp_addlinkedsrvlogin @rmtsrvname=testDatabase, @useself=false, @rmtuser=username, @rmtpassword=password;
--查看所有已链接的服务器
exec sp_linkedservers
--试是否创徏q程链接成功
declare @str varchar(100);
exec @str=sp_testlinkedserver testDatabase;
print @str;
--索远E数据库?br />select top 10 * from testDatabase.MobileLib.dbo.wap_news
--删除已链接服务器
--删除本地d服务?br />exec sp_dropserver mobileIRDDB
]]>
]]>
和压~(CompressionQ相比,数据库分区(PartitionQ的操作更ؓ(f)复杂J琐。而且与Compression一ơ操作,ln保持不同Q分区是一w要长期维护周期变更的操作?/p>
指定分区?/h1>
q要求在同一数据库下有另一张已分好区的表,同时该表的分区列和当前选中的列的类?strong>完全一?/strong>?
q样的好处是当两张表在查询中有关联时Qƈ且其兌列就是分区列Ӟ使用同样的分区策略会(x)更有效率?
q样?x)将表中的所有烦引也一同分区,实现“寚w”。这是一个重要而麻烦的选项Q具体需求请参阅MSDNQ?a target="_blank">已分区烦引的Ҏ(gu)指导原则Q?
q样的好处是表和索引的分Z_(d)一斚w查询时利用烦引更为高效,而且在下文提到的UdUd分区也会(x)更ؓ(f)高效?分区函数与分区方?/h1>
创徏分区
BEGIN TRANSACTION
CREATE PARTITION FUNCTION [TestFunction](datetime) AS RANGE LEFT FOR VALUES (N'2010-01-01T00:00:00', N'2010-02-01T00:00:00',
N'2010-03-01T00:00:00', N'2010-04-01T00:00:00', N'2010-05-01T00:00:00', N'2010-06-01T00:00:00')
CREATE PARTITION SCHEME [TestScheme] AS PARTITION [TestFunction] TO ([PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])
CREATE CLUSTERED INDEX [ClusteredIndex_on_TestScheme_634025264502439124] ON [dbo].[Account]
(
[birthday]
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [TestScheme]([birthday])
DROP INDEX [ClusteredIndex_on_TestScheme_634025264502439124] ON [dbo].[Account] WITH ( ONLINE = OFF )
COMMIT TRANSACTIONCREATE CLUSTERED INDEX [ClusteredIndex_on_TestScheme_634025229911990663] ON [dbo].[Account]
(
[birthday]
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [TestScheme]([birthday])
DROP INDEX [ClusteredIndex_on_TestScheme_634025229911990663] ON [dbo].[Account] WITH ( ONLINE = OFF )
CREATE CLUSTERED INDEX [IX_id] ON [dbo].[Account]
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [TestScheme]([birthday])CREATE CLUSTERED INDEX [IX_id] ON [dbo].[Account]
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [TestScheme]([birthday])
CREATE NONCLUSTERED INDEX [UIX_birthday] ON [dbo].[Account]
(
[birthday] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [TestScheme]([birthday])
CREATE NONCLUSTERED INDEX [UIX_name] ON [dbo].[Account]
(
[name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON,
ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)注意事项
?
附:(x)对分区ƈ行查询的说明
]]>
]]>
有关此问题的高帮助可以?http://support.microsoft.com/ 扑ֈ?br>查询 "troubleshooting 1202 events"?br>
当在一个或多个l策略对?GPO)中的用户帐户不能解析Z?SID 时发生错?0x534。导致此错误的原因可能是在用h限或一?GPO 的受限制的组分支中引用的用户帐户键入错误或已被删除。要解析此事Ӟ误pd的管理员Q执行下列操?
1. 识别不能解析Z?SID 的帐?
在命令行中,键入: FIND /I "Cannot find" %SYSTEMROOT%\Security\Logs\winlogon.log
?FIND 的输ZQ?Cannot find" 后面的字W串是有问题的帐户名?br>
CZ: Cannot find JohnDough?br>
在这U情况下Q用户名 "JohnDough" ?SID 不能定。这通常是因为帐户已l被删除Q被重命名,或拼写错?例如Q?JohnDoe")?br>
2. ?RSoP 来识别特定的用户权限Q受限制的组Q和饱含有问题帐L(fng)?GPO:
a. 开?-> q行 -> RSoP.msc
b. 查看“计算机配|\Windows 讄\安全讄\本地{略\用户权限分配”?#8220;计算机配|\Windows 讄\安全讄\本地{略\受限制的l?#8221;的结果,查找用红色的 X 标记的错误?br>c. 对于M用红色的 X 标记的用h限或受限制的l,包含有问题的{略的相?GPO 在标题ؓ(f)“?GPO”的列中列出。注意生错误的特定用户权限Q受限制的组和包含的?GPO?br>
3. 从组{略中删除不能解析的帐户
a. 开?-> q行 -> MMC.EXE
b. ?#8220;文g”菜单选择“d/删除理单元...”
c. ?#8220;d/删除理单元”对话框选择“d...”
d. ?#8220;d独立理单元”对话框中选择“l策略对象编辑器”Q然后单?#8220;d”
e. ?#8220;选择l策略对?#8221;对话框中Q单?#8220;览”按钮
f. ?#8220;览l策略对?#8221;对话框中Q选择“全部”选项?br>g. 对于在步?2 中识别出的每一个源 GPOQ更正在步骤 2 中用U色?X 标出的特定用h限或受限制的l。这些用h限或受限制的l可以通过删除或更正到在步?1 中识别出的有问题帐户的引用来q行更正?br>
]]>
作ؓ(f)源列 86Q?#8220;内容?#8221;Q的数据对于所指定的缓冲区来讲太大?/p>
]]>
在存储过E中创徏的本?strong style="color: black; background-color: rgb(160, 255, 255);">临时?/strong>Q相当于存储q程的变量,只在存储q程内可见,而在前台E序中创建的本地临时?/strong>Q就和微软联Z书中所写的一P是对当前的用戯接可见。了解了q些Q可以在不同场合不同需求下使用不同的方法来创徏本地临时?/strong>Q这P?x)?strong style="color: black; background-color: rgb(160, 255, 255);">临时?/strong>发挥它最大的用处?br />
/*****************表变?*******************/
declare @t table(
cataid int
)
insert into @t select a.cataid from f_getchlid(27,'5961051') a
select top 10 favorites.*,multicata.cataname
from favorites left outer join multicata on favorites.cataid=multicata.cataid
where favorites.userid='5961051' and favorites.cataid in (
select * from @t)
/****************临时?***********************/
Ҏ(gu)一?br />
select a.cataid into #t from f_getchlid(27,'5961051') a
select top 10 favorites.*,multicata.cataname
from favorites left outer join multicata on favorites.cataid=multicata.cataid
where favorites.userid='5961051' and favorites.cataid in (
select * from #t)
drop table #t
Ҏ(gu)二?br />
create table #t (
cataid int
)
insert into #t select a.cataid from zhaoguoguang.f_getchlid(27,'5961051') a
select top 10 favorites.*,multicata.cataname
from favorites left outer join multicata on favorites.cataid=multicata.cataid
where favorites.userid='5961051' and favorites.cataid in (
select * from #t)
drop table #t
*******************Transact_SQL********************
--?句 ???br />--数据操作
SELECT --从数据库表中索数据行和列
INSERT --向数据库表添加新数据?br />DELETE --从数据库表中删除数据?br />UPDATE --更新数据库表中的数据
--数据定义
CREATE TABLE --创徏一个数据库?br />DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表l构
CREATE VIEW --创徏一个视?br />DROP VIEW --从数据库中删除视?br />CREATE INDEX --为数据库表创Z个烦?br />DROP INDEX --从数据库中删除烦?br />CREATE PROCEDURE --创徏一个存储过E?br />DROP PROCEDURE --从数据库中删除存储过E?br />CREATE TRIGGER --创徏一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库d一个新模式
DROP SCHEMA --从数据库中删除一个模?br />CREATE DOMAIN --创徏一个数据值域
ALTER DOMAIN --改变域定?br />DROP DOMAIN --从数据库中删除一个域
--数据控制
GRANT --授予用户讉K权限
DENY --拒绝用户讉K
REVOKE --解除用户讉K权限
--事务控制
COMMIT --l束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据讉K特征
--E序化SQL
DECLARE --为查询设定游?br />EXPLAN --为查询描q数据访问计?br />OPEN --索查询结果打开一个游?br />FETCH --索一行查询结?br />CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
---局部变?br />declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以@@开?/p>
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符?x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ??then e_wage*1.08
when job_level = ??then e_wage*1.07
when job_level = ??then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的?br /> while @y < 3
begin
select @c = 100*@x + @y
print @c --打印变量c 的?br /> select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--?{待1 时2 分零3 U后才执行SELECT 语句
waitfor delay ?1:02:03?br />select * from employee
--?{到晚上11 炚w8 分后才执行SELECT 语句
waitfor time ?3:08:00?br />select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--------- 只能在用like关键字的where子句中用通配W?
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序Qdesc-降序Qasc-升序
order by 1,2 --------- by列号
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查?br /> --------- 除非能确保内层select只返回一个行的|
--------- 否则应在外层where子句中用一个in限定W?br /> select distinct column_name form table_name --------- distinct指定索独有的列|不重?br /> select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 表按行分组,指定列中有相同的?br /> having count(*) = 2 --------- having选定指定的组
select *
from table1, table2
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id -------- 叛_部连?
select stockname from table1
union [all] ----- union合ƈ查询l果集,all-保留重复?br /> select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value为select语句
***update***
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate table_name ----------- 删除表中所有行Q仍保持表的完整?br /> drop table table_name --------------- 完全删除?/p>
***alter table*** --- 修改数据库表l构
alter table database.owner.table_name add column_name char(2) null .....
sp_help table_name ---- 昄表已有特?br /> create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 实现删除列的Ҏ(gu)Q创建新表)
alter table table_name drop constraint Stockname_default ---- 删除Stockname的defaultU束
***function(/*常用函数*/)***
----l计函数----
AVG --求^均?br />COUNT --l计数目
MAX --求最大?br />MIN --求最?br />SUM --求和
--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函数q回表达式中所有数据的标准?/p>
--STDEVP()
--STDEVP()函数q回M标准?/p>
--VAR()
--VAR()函数q回表达式中所有值的l计变异?/p>
--VARP()
--VARP()函数q回M变异?/p>
----术函数----
/***三角函数***/
SIN(float_expression) --q回以弧度表C的角的正u
COS(float_expression) --q回以弧度表C的角的余u
TAN(float_expression) --q回以弧度表C的角的正切
COT(float_expression) --q回以弧度表C的角的余切
/***反三角函?**/
ASIN(float_expression) --q回正u是FLOAT 值的以弧度表C的?br />ACOS(float_expression) --q回余u是FLOAT 值的以弧度表C的?br />ATAN(float_expression) --q回正切是FLOAT 值的以弧度表C的?br />ATAN2(float_expression1,float_expression2)
--q回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度{换ؓ(f)角度q回与表辑ּ相同的数据类型可?br /> --INTEGER/MONEY/REAL/FLOAT cd
RADIANS(numeric_expression) --把角度{换ؓ(f)弧度q回与表辑ּ相同的数据类型可?br /> --INTEGER/MONEY/REAL/FLOAT cd
EXP(float_expression) --q回表达式的指数?br />LOG(float_expression) --q回表达式的自然Ҏ(gu)?br />LOG10(float_expression)--q回表达式的?0 为底的对数?br />SQRT(float_expression) --q回表达式的qx?br />/***取近似值函?**/
CEILING(numeric_expression) --q回>=表达式的最整数返回的数据cd与表辑ּ相同可ؓ(f)
--INTEGER/MONEY/REAL/FLOAT cd
FLOOR(numeric_expression) --q回<=表达式的最整数返回的数据cd与表辑ּ相同可ؓ(f)
--INTEGER/MONEY/REAL/FLOAT cd
ROUND(numeric_expression) --q回以integer_expression 为精度的四舍五入D回的数据
--cd与表辑ּ相同可ؓ(f)INTEGER/MONEY/REAL/FLOAT cd
ABS(numeric_expression) --q回表达式的l对D回的数据cd与表辑ּ相同可ؓ(f)
--INTEGER/MONEY/REAL/FLOAT cd
SIGN(numeric_expression) --试参数的正负号q回0 零? 正数?1 负数q回的数据类?br /> --与表辑ּ相同可ؓ(f)INTEGER/MONEY/REAL/FLOAT cd
PI() --q回gؓ(f)π ?.1415926535897936
RAND([integer_expression]) --用Q选的[integer_expression]做种子值得?-1 间的随机点?/p>
----字符串函?---
ASCII() --函数q回字符表达式最左端字符的ASCII 码?br />CHAR() --函数用于ASCII 码{换ؓ(f)字符
--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数?x)返回一个NULL ?br />LOWER() --函数把字W串全部转换为小?br />UPPER() --函数把字W串全部转换为大?br />STR() --函数把数值型数据转换为字W型数据
LTRIM() --函数把字W串头部的空格去?br />RTRIM() --函数把字W串N的空格去?br />LEFT(),RIGHT(),SUBSTRING() --函数q回部分字符?br />CHARINDEX(),PATINDEX() --函数q回字符串中某个指定的子串出现的开始位|?br />SOUNDEX() --函数q回一个四位字W码
--SOUNDEX函数可用来查扑֣音相似的字符串但SOUNDEX函数Ҏ(gu)字和汉字均只q回0 值 ?
DIFFERENCE() --函数q回由SOUNDEX 函数q回的两个字W表辑ּ的值的差异
--0 两个SOUNDEX 函数q回值的W一个字W不?br /> --1 两个SOUNDEX 函数q回值的W一个字W相?br /> --2 两个SOUNDEX 函数q回值的W一二个字符相同
--3 两个SOUNDEX 函数q回值的W一二三个字W相?br /> --4 两个SOUNDEX 函数q回值完全相?br />
QUOTENAME() --函数q回被特定字W括h的字W串
/*select quotename('abc', '{') quotename('abc')
q行l果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函数q回一个重复character_expression 指定ơ数的字W串
/*select replicate('abc', 3) replicate( 'abc', -2)
q行l果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函数指定的字符串的字符排列序颠?br />REPLACE() --函数q回被替换了指定子串的字W串
/*select replace('abc123g', '123', 'def')
q行l果如下
----------- -----------
abcdefg*/
SPACE() --函数q回一个有指定长度的空白字W串
STUFF() --函数用另一子串替换字符串指定位|长度的子串
----数据cd转换函数----
CAST() 函数语法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函数语法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
q行l果如下
------------------------------ ------------
199 Jan 15 2000
----日期函数----
DAY() --函数q回date_expression 中的日期?br />MONTH() --函数q回date_expression 中的月䆾?br />YEAR() --函数q回date_expression 中的q䆾?br />DATEADD(<datepart> ,<number> ,<date>)
--函数q回指定日期date 加上指定的额外日期间隔number 产生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函数q回两个指定日期在datepart 斚w的不同之?br />DATENAME(<datepart> , <date>) --函数以字W串的Ş式返回日期的指定部分
DATEPART(<datepart> , <date>) --函数以整数值的形式q回日期的指定部?br />GETDATE() --函数以DATETIME 的缺省格式返回系l当前的日期和时?/p>
----pȝ函数----
APP_NAME() --函数q回当前执行的应用程序的名称
COALESCE() --函数q回众多表达式中W一个非NULL 表达式的?br />COL_LENGTH(<'table_name'>, <'column_name'>) --函数q回表中指定字段的长度?br />COL_NAME(<table_id>, <column_id>) --函数q回表中指定字段的名U即列名
DATALENGTH() --函数q回数据表达式的数据的实际长?br />DB_ID(['database_name']) --函数q回数据库的~号
DB_NAME(database_id) --函数q回数据库的名称
HOST_ID() --函数q回服务器端计算机的名称
HOST_NAME() --函数q回服务器端计算机的名称
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函数只在SELECT INTO 语句中用用于插入一个identity column列到新表?br />/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函数判断所l定的表辑ּ是否为合理日?br />ISNULL(<check_expression>, <replacement_value>) --函数表辑ּ中的NULL 值用指定值替?br />ISNUMERIC() --函数判断所l定的表辑ּ是否为合理的数?br />NEWID() --函数q回一个UNIQUEIDENTIFIER cd的数?br />NULLIF(<expression1>, <expression2>)
--NULLIF 函数在expression1 与expression2 相等时返回NULL D不相{时则返回expression1 的?/p>