我有一表,旗下有个字段Keywords为nvarchar型
内容为 |中搜|开发渠道|智能手机|
我如何通过查询仅提取 中搜 不要那个"|" 也不要后面的了.另外还有一个表Keyword 有一个ntext类型14,833,555,666,777
如何提取 14 833 555 666 777,不要逗号.谢谢老师们.
内容为 |中搜|开发渠道|智能手机|
我如何通过查询仅提取 中搜 不要那个"|" 也不要后面的了.另外还有一个表Keyword 有一个ntext类型14,833,555,666,777
如何提取 14 833 555 666 777,不要逗号.谢谢老师们.
set @a = N'¦中搜 ¦开发渠道 ¦智能手机 ¦'
select substring(reverse(SUBSTRING(reverse(@a),charINDEX('¦',@a ),LEN(@a)-charINDEX('¦',@a))),1,charindex('¦',reverse(SUBSTRING(reverse(@a),charINDEX('¦',@a ),LEN(@a)-charINDEX('¦',@a))))-1)
2.select replace(14,833,555,666,777,',','')
2不知道对不对,你测一下,1测过了
set @s='¦ 中搜 ¦开发渠道 ¦智能手机 ¦'select substring(@s,charindex('¦',@s)+1,charindex('¦',@s,charindex('¦',@s)+1)-charindex('¦',@s)-1)
insert ta select
'¦中搜 ¦开发渠道 ¦智能手机 ¦'
go--加一个分隔函数:
create function F_split(
@s varchar(8000), --包含多个数据项的字符串
@pos int, --要获取的数据项的位置
@split varchar(10) --数据分隔符
)RETURNS varchar(100)
AS
BEGIN
IF @s IS NULL RETURN(NULL)
DECLARE @splitlen int --分隔符长度
SELECT @splitlen=LEN(@split+'a')-2
WHILE @pos>1 AND charindex(@split,@s+@split)>0
SELECT @pos=@pos-1,
@s=stuff(@s,1,charindex(@split,@s+@split)+@splitlen,'')
RETURN(nullif(left(@s,charindex(@split,@s+@split)-1),''))
END
GOselect dbo.F_split(col,2,'|')
from tadrop table ta
drop function F_split
/*
----------------------------------------------------------------------------------------------------
中搜 (所影响的行数为 1 行)
*/
SET @s=N'¦中搜 ¦开发渠道 ¦智能手机'
SELECT STUFF(RIGHT(@s,LEN(@s)-1),CHARINDEX(N'¦',RIGHT(@s,LEN(@s)-1)),1000000,'')CREATE TABLE t(t NTEXT)
GO
INSERT t SELECT N'123,121,213'GO
SELECT REPLACE(CAST(t AS VARCHAR(8000)),',',' ') FROM t
GO
DROP TABLE t
GO