当前位置:主页>销售管理软件> 列表

在SQL查询中如何提取或删除字符串中的特定字符? 找软件电话销售技巧

仓库管理软件版1楼: 例如 字段 a 值为 ''ccppvv68-34-78''
''ccppvv3-125-555''
字段 B 值为 ''ccppvv''

如何的到
a a-1 a-2 a-3
---------------------------------------
ccppvv68-34-78 68 34 78
ccppvv3-125-555 3 125 555
---------------------------------------
select a,......
from table..

2楼: 如果a字段是定长的。。。
或你要的这几个内容,位置是相对固定的就好办了
select a,substring(a,7,2) as [a-1],substring(a,11,2) as [15-2],substring(a,7,2) as [a-3] from table 如excel进销存记账本

3楼: select a,
SUBSTRING(a, 7, 2), SUBSTRING(a, 10, 2),SUBSTRING(a, 13, 2)
from table

不如干脆用游标来处理算了!

4楼: re :bbgsgs
如果位置是不固定的呢?谢谢

5楼: 需要有个说明,我觉得ccppvv-68-34-78这样还好做一下
否则第一个不好取,除非固定 ccppvv
charindex就可以解决这个问题

6楼: 建议楼主在存数据的时候,格式化一下,以方便后期的使用!


ccppvv068-034-078
ccppvv003-125-555
上面这样的固定格式,就容易使用了!

仓库管理软件版7楼: 如果位置不固定就只有用游标了。。。
在游标里判断一个字符一个字符的判断了
如果是数字,就取出,再取下一个,如果是‘-’就说明一段取完了
这就很费事了。。。

8楼: 其实现在只有一个问题,就是如何删除字符串中的ccppvv,而且ccppvv是已知的,可以从其他表中得到的.有没有deletestr(a,b) 这样的删除特定字符串的函数?

9楼: STUFF:删除指定长度的字符并在指定的起始点插入另一组字符
LEFT:从字符串的左边开始返回指定数量的部分字符串
RIGHT

10楼: SUBSTRING:返回部分内容

11楼: 干吗要删除了,用的时候截取其后面的字符SUBSTRING(a, 7, LEN(A)),就可以了啊!

12楼: 恩,就这几个函数
楼主自己试试 如软件电话销售技巧

13楼: http://www.delphibbs.com/delphibbs/dispq.asp?lid=3318741

仓库管理软件版14楼: 表TB1 id a
1 ''ccppvv68-34-78''
1 ''ccppvv3-125-555''
2 ''aatt44-39-8''
0 ''56-3-27''



表TB2 id a
0 ''''
1 ''ccppvv''
2 ''aatt''

建立GetArrayData2自定義函數:
CREATE FUNCTION GetArrayData2(@SumNumber varchar(8000),@Getn int,@Str varchar(1))
RETURNS varchar(8000) AS --返回字符串類型
BEGIN
Declare @tmp varchar(100); Declare @TL Int; DECLARE @X INT; Declare @L Int; DECLARE @GO INT
Set @L = 1 --初始化長度
SET @SumNumber = @SumNumber + @Str + ''0'' --規組字符串
SET @X = 0
SET @TL = 0
Set @tmp = ''''
WHILE @L < LEN(@SumNumber)
BEGIN -- CHARINDEX()
If SubString(@SumNumber, @L,1)=@Str
BEGIN
SET @GO = @L
Set @TL = @TL+1
IF @TL=@GETN-1
SET @X = @GO
IF @TL=@GETN
SET @TMP =(SUBSTRING(@SumNumber,@X+1,@GO-@X-1 ) )
If @TMP <> ''''
Break
END
SET @L = @L+ 1
END
Return @TMP
END

執行SQL語句:
SELECT TB1.a, dbo.GetArrayData2(REPLACE(TB1.a, TB2.a, ''''), 1, ''-'') AS a1,
dbo.GetArrayData2(REPLACE(TB1.a, TB2.a, ''''), 2, ''-'') AS a2,


dbo.GetArrayData2(REPLACE(TB1.a, TB2.a, ''''), 3, ''-'') AS a3
FROM TB1 LEFT OUTER JOIN TB2 ON TB1.id = TB2.id

顯示結果是:
a a1 a2 a3
ccppvv3-125-555 3 125 555
ccppvv68-34-78 68 34 78
aatt44-39-8 44 39 8
56-3-27 56 3 27

http://www.delphibbs.com/delphibbs/dispq.asp?lid=3318741

15楼: 多人接受答案了。

16楼: SELECT a,
SUBSTRING(a,LEN(b)+1,CHARINDEX(''-'',a)-1-LEN(b)) AS A1,
SUBSTRING(a,CHARINDEX(''-'',a)+1, CHARINDEX(''-'',SUBSTRING(a,CHARINDEX(''-'',a)+1,LEN(a)))-1) AS A2,
SUBSTRING(a,CHARINDEX(''-'',SUBSTRING(a,CHARINDEX(''-'',a)+1,LEN(a)))+CHARINDEX(''-'',a)+1,LEN(a)) AS A3
FROM aTemp