sql2000中如何截取字符串?

thomas0920 2007-08-24 08:38:34
如何取字符串中的一部分?
...全文
4985 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
HappyKeKe 2010-05-05
  • 打赏
  • 举报
回复
35楼很厉害啊
camelzzx 2010-05-05
  • 打赏
  • 举报
回复
初学者,用过这几个:
Substring()
--substring(cost_subj_code,6,30)
--cost_subj_code(字段名称);6 从第六位开始;30 到第30位结束,下面两个的语法一样。
Left()

Right()
huminghua 2010-05-05
  • 打赏
  • 举报
回复
哇塞多来啦!我也来凑下热闹啊!呵呵!楼主你应该知道了吧!帮顶!
htl258_Tony 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 roy_88 的回复:]
SQL code
--各种字符串分函数

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO

--3.2.1 循环截取法
……
[/Quote]基本够用了
qinguanhua 2010-05-05
  • 打赏
  • 举报
回复
学习中
needanothercoder 2010-05-05
  • 打赏
  • 举报
回复
很强大很强大
永生天地 2010-05-05
  • 打赏
  • 举报
回复
n年了
gjz_1209 2008-12-21
  • 打赏
  • 举报
回复
顶一下吧,答案已经好多了。
中国风 2008-12-21
  • 打赏
  • 举报
回复
--各种字符串分函数

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO

--3.2.1 循环截取法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
GO


/*==============================================*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO

--3.2.3.1 使用临时性分拆辅助表法
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b

INSERT @re SELECT SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID)
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID
RETURN
END
GO

/*==============================================*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tb_splitSTR]') and objectproperty(id,N'IsUserTable')=1)
drop table [dbo].[tb_splitSTR]
GO

--3.2.3.2 使用永久性分拆辅助表法
--字符串分拆辅助表
SELECT TOP 8000 ID=IDENTITY(int,1,1) INTO dbo.tb_splitSTR
FROM syscolumns a,syscolumns b
GO

--字符串分拆处理函数
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS TABLE
AS
RETURN(
SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100))
FROM tb_splitSTR
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)
GO


/*==============================================*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO

--3.2.5 将数据项按数字与非数字再次拆份
CREATE FUNCTION f_splitSTR(
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(No varchar(100),Value varchar(20))
AS
BEGIN
--创建分拆处理的辅助表(用户定义函数中只能操作表变量)
DECLARE @t TABLE(ID int IDENTITY,b bit)
INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b

INSERT @re
SELECT No=REVERSE(STUFF(col,1,PATINDEX('%[^-^.^0-9]%',col+'a')-1,'')),
Value=REVERSE(LEFT(col,PATINDEX('%[^-^.^0-9]%',col+'a')-1))
FROM(
SELECT col=REVERSE(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID))
FROM @t
WHERE ID<=LEN(@s+'a')
AND CHARINDEX(@split,@split+@s,ID)=ID)a
RETURN
END
GO


/*==============================================*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_splitSTR]
GO

--3.2.6 分拆短信数据
CREATE FUNCTION f_splitSTR(@s varchar(8000))
RETURNS @re TABLE(split varchar(10),value varchar(100))
AS
BEGIN
DECLARE @splits TABLE(split varchar(10),splitlen as LEN(split))
INSERT @splits(split)
SELECT 'AC' UNION ALL
SELECT 'BC' UNION ALL
SELECT 'CC' UNION ALL
SELECT 'DC'
DECLARE @pos1 int,@pos2 int,@split varchar(10),@splitlen int
SELECT TOP 1
@pos1=1,@split=split,@splitlen=splitlen
FROM @splits
WHERE @s LIKE split+'%'
WHILE @pos1>0
BEGIN
SELECT TOP 1
@pos2=CHARINDEX(split,@s,@splitlen+1)
FROM @splits
WHERE CHARINDEX(split,@s,@splitlen+1)>0
ORDER BY CHARINDEX(split,@s,@splitlen+1)
IF @@ROWCOUNT=0
BEGIN
INSERT @re VALUES(@split,STUFF(@s,1,@splitlen,''))
RETURN
END
ELSE
BEGIN
INSERT @re VALUES(@split,SUBSTRING(@s,@splitlen+1,@pos2-@splitlen-1))
SELECT TOP 1
@pos1=1,@split=split,@splitlen=splitlen,@s=STUFF(@s,1,@pos2-1,'')
FROM @splits
WHERE STUFF(@s,1,@pos2-1,'') LIKE split+'%'
END
END
RETURN
END
GO
cy527300280 2008-12-20
  • 打赏
  • 举报
回复
学习
aniudage 2008-12-20
  • 打赏
  • 举报
回复
学习
-狙击手- 2008-12-20
  • 打赏
  • 举报
回复
substring()
——任意位置取子串

left()
right()
——左右两端取子串

ltrim()
rtrim()
——截断空格,没有trim()。

charindex()
patindex()
——查子串在母串中的位置,没有返回0。区别:patindex支持通配符,charindex不支持。
IT-工程师 2008-12-20
  • 打赏
  • 举报
回复
substring
charindex
patindex
stuff
left
right
bluefangxiao 2008-12-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Limpire 的回复:]
substring()
——任意位置取子串

left()
right()
——左右两端取子串

ltrim()
rtrim()
——截断空格,没有trim()。

charindex()
patindex()
——查子串在母串中的位置,没有返回0。区别:patindex支持通配符,charindex不支持。
[/Quote]
已经很详细了,up ~~~
knifeguest 2008-12-15
  • 打赏
  • 举报
回复

1、select left(字段名,长度) from 表名

2、select substring(字段名,1,长度) from 表名

注意substring函数是从1开始的

猿敲月下码 2008-12-15
  • 打赏
  • 举报
回复
使用substring(取字符串)函数
substring函数用于返回字符串、二进制字符串或文本串的一部分,还可以将此函数解释为从指定的位置取得指定个数的字符。

语法:

substring (expression, start, length)

参数说明:

l expression:字符串表达式、可以是二进制字符串、text、image、列或包含列的表达式。

l start:一个整数,指定子串的开始位置。

l length:一个整数,指定子串的长度(要返回的字符数或字节数)。

示例:

下面使用substring函数取得“商品入库日期”。

本例将使用substring函数,在“商品编号”字段中从第6位开始取字符串,共取4位,例如在“S20031211002”字符串中,从第6位开始取,共取4位,则返回结果为“1211”。

mjtalhx 2008-12-15
  • 打赏
  • 举报
回复
Charindex()
检测字符位置
Patindex()
可模糊查询的监测字符位置
Substring()
字符串截取
Left()
从左开始截取
Right()
从右开始截取
LUOLZD001 2008-12-15
  • 打赏
  • 举报
回复
up
sdweihailh 2008-12-14
  • 打赏
  • 举报
回复
Substring()

Left()

Right()
zhao_yong 2008-12-13
  • 打赏
  • 举报
回复
substring
charindex
patindex
stuff
left
right
加载更多回复(23)

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧