sql 截取一个字段里某一字符串中间的字符

sql 截取一个字段里某一字符串中间的字符,第1张

--这个查询需要注意的是qwer后的需要查询的字符串必须是一个空格,不能有的是一个空格有的是两个。也就是格式要固定。
--定义参数
create table #a (string varchar(max))
declare @sql varchar(max)
declare @a varchar(max)
select @a ='asdf qwer zxcv 1234 qwer yuchor 3452 qwer abcd 7893'--这个是要查询的字符串
---------------------------查询qwer后面的字符串----------------------------------------
while charindex('qwer',@a)<>0
begin
select @a=SUBSTRING ( @a,charindex('qwer',@a)+5,LEN(@a)-charindex('qwer',@a)-4)
insert into #a values (@a)
end
select SUBSTRING (LTRIM ( string) ,1,charindex(' ',LTRIM ( string))) as result from #a
--查询结果
result
zxcv
yuchor
abcd

如果需要筛选SQL字符串字段中部分值 应该怎么做呢?下面就教您筛选SQL字符串字段中部分值的记录的方法 供您参考

例如有一个KKBH(卡口编号)字段 这是一个字典字段(对应另一个实体表(卡口表)的编号字段) 这个字段的值保存所属卡口值域{ }

本来想到的是通过or来实现 这样需要动态生成SQL语句

后来想到一个办法用charindex搜索SQL字符串的办法 将所有的要查的卡口编号组成类似 @ 这样待查字符串 sql查询时通过charindex筛选出在待查SQL字符串里有的KKBH的记录

经测试使用or与使用charindex 两者在MSSQL中执行效率差不多

具体实现

用户界面查询需求 可能搜索N个卡口的记录(N的值域{ 所有卡口个数}) 设计这个UI的形式一共三种

一 一个多选listbox 用户界面运行时将卡口字典表载入listbox信息

二 两个listbox 左边为待选 右边为已选 中间加两个按钮添加与删除 用户界面运行时将卡都字典表载入左边的listbox

三 多个Checkbox 可以在界面设计阶段直接做死字典表 即有几个卡口就话几个checkbox 或者在程序运行根据字典表绘制动态绘制checkbox

UI的优缺点这里不讨论 我这里选择第三种方式的动态绘制

在查询阶段根据所选卡口生成待选SQL字符串入 " @ ”

并将此条件传回后台查询服务程序

lishixinzhi/Article/program/MySQL/201311/29554

你说的函数是oracle中的substr,sqlserver中的substring
下面是贴来的,就是手册翻译而来的,你随便看看吧
语法
SUBSTRING
(
expression
,
start
,
length
)
参数
expression
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。
start
是一个整数,指定子串的开始位置。
length
是一个整数,指定子串的长度(要返回的字符数或字节数)。
说明
由于在
text
数据上使用
SUBSTRING

start

length
指定字节数,因此
DBCS
数据(如日本汉字)可能导致在结果的开始或结束位置拆分字符。此行为与
READTEXT
处理
DBCS
的方式一致。然而,由于偶而会出现奇怪的结果,建议对
DBCS
字符使用
ntext
而非
text。
返回类型
如果
expression
是支持的字符数据类型,则返回字符数据。如果
expression
是支持的
binary
数据类型,则返回二进制数据。
返回字符串的类型与给定表达式的类型相同(表中显示的除外)。
给定的表达式
返回类型
text
varchar
image
varbinary
ntext
nvarchar
注释
在字符数中必须指定使用
ntext、char

varchar
数据类型的偏移量(start

length)。在字节数中必须指定使用
text、image、binary

varbinary
数据类型的偏移量。
说明
兼容级别可能影响返回值。有关兼容级别的更多信息,请参见
sp_dbcmptlevel。
示例
A
在字符串上使用
SUBSTRING
下例显示如何只返回字符串的一部分。该查询在一列中返回
authors
表中的姓氏,在另一列中返回
authors
表中的名字首字母。
USE
pubs
SELECT
au_lname,
SUBSTRING(au_fname,
1,
1)
FROM
authors
ORDER
BY
au_lname
下面是结果集:
au_lname
----------------------------------------
-
Bennet
A
Blotchet-Halls
R
Carson
C
DeFrance
M
del
Castillo
I

Yokomoto
A
(23
row(s)
affected)
下例显示如何显示字符串常量
abcdef
中的第二个、第三个和第四个字符。
SELECT
x
=
SUBSTRING('abcdef',
2,
3)
下面是结果集:
x
----------
bcd
(1
row(s)
affected)

可以的,需要用到charindex函数和substring函数。

CHARINDEX函数常常用来在一段字符中搜索字符或者字符串。

substring

public String substring(int beginIndex)

返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。

扩展资料

javascript示例

1 <scripttype="text/javascript">

2 var str="Helloworld!"

3 documentwrite(strsubstring(1,3));4 </script>

上面返回字符串:"el";

strsubstring(1,2) //返回e

strsubstring(1) //返回"elloworld";

还有此函数中会出现奇怪的现象,当出现strsubstring(5,0);

这又是怎么回事,不过返回的是"Hello",

strsubstring(5,1) //返回"ello",截去了第一位,返回余下的

可见substring(start,end),可以有不同的说明,即start可以是要返回的长度,end是所要去掉的多少个字符(从首位开始)

在JS中,substr(start,length),用得较方便

CustomName包含客户的First Name和Last Name,它们之间被一个空格隔开。我们用CHARINDX函数确定两个名字中间空格的位置。通过这个方法,我们可以分析ContactName列的空格位置,这样可以只显示这个列的last name部分。

select top 5 substring(ContactName,charindex(' ',ContactName)+1,len(ContactName)) as [Last Name] from customers

CHARINDEX函数找到First Name和Last Name之间的空格,所以SUBSTRING函数可以分开ContactName列,这样就只有Last Name被选出。在CHARINDEX函数返回的整数上加1,这样Last Name不是从空格开始。

参考资料来源:百度百科-CHARINDEX

百度百科-substring

select
substring(字段名,charindex('-',字段名,0)+1,len(字段名)-charindex('-',reverse(字段名),0)-charindex('-',字段名,0))
from
表名
substring是截取函数
charindex是算特定符号位置的函数
reverse是把字符串排反序的函数
了解一下这三个函数吧,这句你就应该懂了,我这句刚才试验了一下,没问题,环境sqlserver2000
请采纳。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13336507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-17
下一篇 2023-07-17

发表评论

登录后才能评论

评论列表(0条)

保存