金沙棋牌app手机下载

当前位置:金沙棋牌 > 金沙棋牌app手机下载 > 字符串截取

字符串截取

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-22 11:10

1.CTE

with as类似于临时表,子查询,但它整句只相当于一句sql语句,复合查询时很好用

图片 1图片 2

1 with cr as
2 (select * from a)
3 select * from cr

CTE

返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。

1.对字符串处理,去掉后面两个0,去掉前面数字是0的。'000123010000' 截取之后为1230100

使用rowcount

2.PATINDEX  

返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
基本语法:PATINDEX ( '%pattern%' , expression )
pattern:字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个和最后一个字符时除外)。pattern 是短字符数据类型类别的表达式
expression:表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别

图片 3图片 4

1 patindex('%[^0-9|\.]%',name)  --获取第一个非数字和点的字符的位置

PATINDEX

 Transact-SQL 语法约定

select substring('000123010000',patindex('%[1-9]%','000123010000'),11-patindex('%[1-9]%','000123010000'))

rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,

 3.PARTITION BY

PARTITION BY是分组,GROUP BY 是分组聚合

图片 5图片 6

 1 NAME SCORE
 2 A      13
 3 B      34
 4 A      56
 5 B      68
 6 C       4
 7 SELECT NAME,ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY SCORE) rownum FROM dbo.USERS
 8 NAME rownum
 9 A        1
10 A        2
11 B        1
12 B        2
13 C        1

PARTITION BY

语法
 
PATINDEX ( '%pattern%' , expression )  

主要是定位出第一个不是0的位置

rowcount的设置会在整个会话中有效

 4.rowcount与@@rowcount

rowcount限定之后语句影响的行数,与top差不多,但top影响的行数不能用变量,rowcount可以;@@rowcount返回上一句sql影响的数据行数。

图片 7图片 8

1 set rowcount 10
2 select * from 表A--返回10条数据
3 
4 select  * from 表A
5 select @@Rowcount --返回表A的行数

View Code

 

备注
如果 pattern 或 expression 为 NULL,则当数据库的兼容级别为 70 时,PATINDEX 将返回 NULL;如果数据库兼容级别小于或等于 65,则仅当 pattern 和 expression 同时为 NULL 时,PATINDEX 才返回 NULL。

2.

SET ROWCOUNT 10
SELECT * FROM dbo.Customer ORDER BY id desc

5.删除除了自动编号不同, 其他都相同的学生冗余信息

delete tablename where  ID  not in(select min( ID) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)

 

PATINDEX 基于输入的排序规则执行比较。若要以指定排序规则进行比较,则可以使用 COLLATE 将显式排序规则应用于输入值。

首先学习两个函数

使用完之后可以设置为:

6.复制(备份)表(只复制结构,源表名:a  新表名:b) 

select * into b from a where 1<>1   (where1=1,拷贝表结构和数据内容)

 

参数
pattern
一个文字字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个或最后一个字符时除外)。pattern 是字符串数据类型类别的表达式。

1.substring  返回字符、binary、text 或 image 表达式的一部分。
      基本语法:SUBSTRING ( expression , start , length
      expression:字符串、二进制字符串、text、image、列或包含列的表达式
      start:整数,指定子串的开始位置      注:SQL中"1"表示字符串中的第一个字符,而.NET中"0"表示第一个字符
      length:整数,指定子串的长度(要返回的字符数或字节数)

SET ROWCOUNT 0

expression
一个表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别。

 2.patindex  返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
      基本语法:PATINDEX ( '*%pattern%*' , expression
      *
pattern:字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个和最后一个字符时除外)。pattern 是短字符数据类型类别的表达式       expression*:表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别

表示下面的查询或者其他操作就可以操作全部,

返回类型
如果 expression 的数据类型为 varchar(max) 或 nvarchar(max),则为 bigint,否则为 int。

 3.reverse 字符串反转函数

否则在下面的代码中可能还使用设置为10的这个数量

示例
A. 在 PATINDEX 中使用模式
以下示例查找模式 ensure 在 Document 表的 DocumentSummary 列的某一特定行中的开始位置。

  REVERSE(character_expression )

因为这个 设置:SET ROWCOUNT 10 是针对整个会话的

 复制代码
USE AdventureWorks;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
GO  

*     character_expression 必须为可隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_expression*

 

下面是结果集:

*   declare @str varchar(20)
   set @str='1234567ABC'
    select reverse(@str)
   --返回结果:
     CBA7654321*

使用top:

 复制代码

64          

(1 row(s) affected)  

如果未通过 WHERE 子句限制要搜索的行,查询将返回表中的所有行,对在其中找到该模式的所有行报告非零值,对在其中未找到该模式的所有行报告零值。

B. 在 PATINDEX 中使用通配符
以下示例使用通配符查找模式 en_ure 在 Document 表中 DocumentSummary 列的某一特定行中的开始位置,其中下划线为代表任何字符的通配符。

 复制代码
USE AdventureWorks;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
GO

 

下面是结果集:

* *

后面不能加动态参数,只能跟整数

 复制代码

64

(1 row(s) affected)  

如果没有限制要搜索的行,查询将返回表中的所有行,对在其中找到该模式的所有行报告非零值。

C. 在 PATINDEX 中使用 COLLATE
以下示例使用 COLLATE 函数显式指定要搜索的表达式的排序规则。

 复制代码
USE tempdb;
GO
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;
GO  

例子:
create table tab(sType varchar(10))
insert tab
select '良好'
union all
select '合格'
union all
select '300'
union all
select '一般'
union all
select '100'
union all
select '89'
select * from tab where (case when patindex('%[0-9]%',sType)=1 then sType else 200 end)<200
or sType='良好' or sType='合格'

drop table tab

select top 10 *  from dbo.Customer ORDER BY id DESC

如果要加,需要使用拼字符串的方式

比如:

declare @n int
declare @sql nvarchar(1000)
set @n=10
set @sql='select top '+cast(@n as varchar(10))+' * from dbo.Customer'
exec(@sql)

性能和可读性都不如rowcount

另外rowcount的作用

还可以用于修改和删除

@@rowcount返回影响上次sql语句所影响的行数

select top 2 * from Customer
select @@Rowcount

--如果表存在的数据大于等于2,则返回2
--如果为1或者0,则@@rowcount返回也是1或者0

注意:删除 修改 查询,新增 都会返回受影响的行数

这玩意用的比较多的对方是:触发器

例如

create trigger ti_tablea on Customer after update
as
if @@rowcount=0 return
……

这样表Customer 受影响的行数如果为0,触发器就会直接退出,不会在继续往下执行

 

第二个用的地方可能是递归或者循环

declare @n int
set @n=1
select * from client_goods where id=@n

while @@rowcount>0
begin
set @n=@n+1
select * from client_goods where id=@n
end

 

本文由金沙棋牌发布于金沙棋牌app手机下载,转载请注明出处:字符串截取

关键词:

上一篇:没有了

下一篇:没有了