欢迎莅临 SUN WU GANG 的园子!!!

世上无难事,只畏有心人。有心之人,即立志之坚午也,志坚则不畏事之不成。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  470 随笔 :: 0 文章 :: 22 评论 :: 30万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

常用字符串操作函数:

 

select case when LEFT('-123456',1) ='-' then '-123456'
when LEFT('-123456',1) <>'-' then '123456' end as "test"

case when
left((str(CONVERT(decimal(18,2), (1-sum( case ImageScore when 1 then 1 when 2 then 1 else 0 end)))/(COUNT(*) )* 100,5,2)+'%'),1)='-' then '0%'
else str(CONVERT(decimal(18,2), (1-sum( case ImageScore when 1 then 1 when 2 then 1 else 0 end)))/(COUNT(*) )* 100,5,2)+'%'
end as "PassRate"

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
--返回字符串中指定的子串出现的开始位置(索引从1开始)
select CHARINDEX('34','1234567890123') as startIndex
--返回字符串中指定的子串出现的开始位置(索引从1开始,字串前必须加%)
select PATINDEX('%34%','1234567890123') as startIndex--大小写转化
select LOWER('abc') 小写,UPPER('abc') 大写
 
--去空格;  LTRIM去除左侧空格;        RTRIM去除左侧空格 
select LTRIM(' abc  ') 去除左侧空格,RTRIM('  abc   ') 去除右侧空格
 
--截取字符串 retrun 1234
--从左侧截取 截取几位
select LEFT('123456',4) as 从左侧开始截取截取4位 --return1234
--从右侧截取 截取几位
select RIGHT('123456',4) as 从左侧开始截取截取4位 --return3456
--从第几位开始截取,截取多长
select SUBSTRING('123456',2,4) as 从左侧第二个位置开始截取4位 -- return 2345
 
--将指定字符串重复指定次数
select REPLICATE('123',2)  -- return 123123
 
--字符串翻转
select REVERSE('123') --return 321
 
--替换字符串内容(将12替换为ab)
select REPLACE('123456','12','ab') --return ab3456
 
--替换字符串 可指定长度和位置(从第三位开始替换2为,替换为ab)
select STUFF('123456',3,2,'ab') -- return 12ab56
 
--应用
select
(stuff((select '|' + b.DIRECTION from QUEUEDETAIL b where b.APPOINTSID = a.APPOINTSID for xml path('')),1,1,''))as DIRECTIONALL,
(stuff((select '|' + b.PARTOFCHECK  from QUEUEDETAIL b where b.APPOINTSID = a.APPOINTSID for xml path('')),1,1,''))as PARTOFCHECKALL
from QUEUEDETAIL b,HIS_QUEUE a

 

1
2
3
4
5
6
7
8
9
10
11
12
--示例
declare @TableNameL varchar(200), @TableName sysname = 'DictPublic',@LengthStr varchar(100)
set @TableNameL = (select (lower(left('helloWpf',1))+SUBSTRING('helloWpf',2,len('helloWpf'))))
set @TableName = (select (lower(left(@TableName,1))+SUBSTRING(@TableName,2,len(@TableName))))
set @LengthStr='获取字符串长度:'+ convert(varchar,len('helloWpf'))
 
print @TableNameL
print @TableName
print @LengthStr
 
select @TableNameL as test1,@TableName as test2,@LengthStr as 获取字符串长度
go

 索引:可理解为目录,可快速定位查询数据,避免扫描整个表,从而提升查询数据的速度,提升系统的效率。

缺点:占用存储空间,索引过多,会损害系统性能(索引并不是越多越好)

SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)

注:主键列默认为聚簇索引,聚簇索引只能有一个,非聚簇索引可以有多个;一般建议在对表创建索引时,使用日期类型的列创建且创建为降序。

 在创建复合索引是建议将日期列作为首列,同时在使用列上应遵循——使用频繁使用的列

注:在需要对多个列建立索引时,建议为其创建组合索引——使用频繁使用的列、小数据类型的列

在创建索引时,不制定索引类型,默认为非聚集索引

索引分为:聚集索引、非聚集索引

1.聚集索引:Clustered--表的存储顺序

在聚集索引中,每张表只能有一个;

在聚集索引中,索引的顺序决定表中数据的顺序(逻辑顺序和物理顺序一致);

在聚集索引中,在表中创建主键列或唯一约束时,会自动创建聚集索引(即在表中添加主键列时,数据库引擎会自动创建约束和索引);

聚集索引效率比非聚集索引效率要高;

2.非聚集索引:NonClustered

非聚集索引,可以有多个;

在非在聚集索引中,索引的结构完全独立与数据行的结构;

在非在聚集索引中,数据表中的数据行和索引的顺序不一致(逻辑顺序和物理顺序一致);

非聚集索引效率比聚集索引效率低;

 查看指定表的索引 

exec sp_helpindex his_queue

go
exec sp_helpindex queuedetail

 应用示例:(注:DROP_EXISTING = OFF/ON, --索引如存在,则是否删除已存在索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
USE DB
GO
IF NOT EXISTS(SELECT Name FROM SysColumns WHERE id=Object_Id('[HIS_QUEUE]') AND Name = 'InsertDateTime')
BEGIN 
   ALTER TABLE HIS_QUEUE ADD InsertDateTime  datetime DEFAULT (CONVERT([date],CONVERT([varchar](100),getdate(),(23)),(23)))   
END
GO
IF NOT EXISTS(SELECT Name FROM SysColumns WHERE id=Object_Id('[QUEUEDETAIL]') AND Name = 'InsertDateTime')
BEGIN
   ALTER TABLE QUEUEDETAIL ADD InsertDateTime  datetime DEFAULT (CONVERT([date],CONVERT([varchar](100),getdate(),(23)),(23)))
END
GO
update QUEUEDETAIL set InsertDateTime=(CONVERT([datetime], QUEUEDETAIL.APPOINTDATE  ,(20)))
update HIS_QUEUE set InsertDateTime=(CONVERT([datetime], HIS_QUEUE.[InsertDate]  ,(20)))
GO
  
/****** Object:  Index [DF_HISQUEUE_InsertDateTime]    Script Date: 2023-05-31 10:21:54 ******/
  
IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'DF_HISQUEUE_InsertDateTime'
DROP INDEX [DF_HISQUEUE_InsertDateTime] ON [dbo].[HIS_QUEUE] WITH ( ONLINE = OFF )
GO
  
/****** Object:  Index [DF_HISQUEUE_InsertDateTime]    Script Date: 2023-05-31 10:21:54 ******/
CREATE CLUSTERED INDEX [DF_HISQUEUE_InsertDateTime] ON [dbo].[HIS_QUEUE]
(
    InsertDateTime desc,
    [APPOINTSDATE] DESC,
    [APPKIND] DESC,
    [HISEXAMNO] DESC,
    [HISID] DESC,
    [NAME] DESC,
    [QUEUENAME] DESC,
    [EXECUTEDEPT] DESC
  
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
  
/****** Object:  Index [DF_QUEUEDETAIL_InsertDateTime]    Script Date: 2023-05-31 10:34:41 ******/
IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'DF_QUEUEDETAIL_InsertDateTime'
DROP INDEX [DF_QUEUEDETAIL_InsertDateTime] ON [dbo].[QUEUEDETAIL] WITH ( ONLINE = OFF )
GO
  
/****** Object:  Index [DF_QUEUEDETAIL_InsertDateTime]    Script Date: 2023-05-31 10:34:41 ******/
CREATE CLUSTERED INDEX [DF_QUEUEDETAIL_InsertDateTime] ON [dbo].[QUEUEDETAIL]
(
    InsertDateTime desc,
    [APPOINTDATE] DESC,
    [APPKIND] DESC,
    [HISEXAMNO] DESC,
    [QUEUENAME] DESC,
    DIRECTION DESC,
    --CheckItemRemark DESC,
    PARTOFCHECK DESC
)<br>WITH <br>(<br>  PAD_INDEX = OFF, <br>  STATISTICS_NORECOMPUTE = OFF, <br>  SORT_IN_TEMPDB = OFF, <br>  DROP_EXISTING = OFF, --索引如存在,则是否删除已存在索引;索引不存在不可ON<br>  ONLINE = OFF, <br>  ALLOW_ROW_LOCKS = ON, <br>  ALLOW_PAGE_LOCKS = ON<br>) ON [PRIMARY]
GO

 

 

posted on   sunwugang  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示