DECLARE @tb TABLE(s VARCHAR(1000))
INSERT @tb SELECT '十里平湖霜满天¦犹抱琵琶半遮面¦问君何所之¦寸寸青丝愁华年¦东游西荡¦对月形单望相互¦玄天邪帝¦只羡鸳鸯不羡仙'
INSERT @tb SELECT '论坛¦哟¦和谐'SELECT RIGHT(stuff(s+'¦',id,len(s),''),charindex('¦',reverse(stuff('¦'+s+'¦',id,len(s),'')))) as '结果'
FROM @tb a
INNER JOIN # b
ON SUBSTRING(s+'¦',id,1)='¦'
上面的语句可以运行,一位好心的老师给的我的表实际情况是这样的
dob.news 下有一个字段 keyword 储存着类似上面 |xxd|xax|xsx|xxxx|xx|x|xxxx|
我该怎么调用呢
上面的@tb s a b 是什么?另外咨询一下,如果仅取出第一个代码又该怎么写呢?
RIGHT(stuff(s+'¦',id,len(s),''),charindex('¦',reverse(stuff('¦'+s+'¦',id,len(s),'')))) stuff,reverse的关键字教程.
DECLARE @tb TABLE(s VARCHAR(1000))
INSERT @tb SELECT '十里平湖霜满天¦犹抱琵琶半遮面¦问君何所之¦寸寸青丝愁华年¦东游西荡¦对月形单望相互¦玄天邪帝¦只羡鸳鸯不羡仙'
INSERT @tb SELECT '论坛¦哟¦和谐'SELECT RIGHT(stuff(s+'¦',id,len(s),''),charindex('¦',reverse(stuff('¦'+s+'¦',id,len(s),'')))) as '结果'
FROM @tb a
INNER JOIN # b
ON SUBSTRING(s+'¦',id,1)='¦'十里平湖霜满天
犹抱琵琶半遮面
问君何所之
寸寸青丝愁华年
东游西荡
对月形单望相互
玄天邪帝
只羡鸳鸯不羡仙
论坛
哟
和谐
if object_id('tempdb.dbo.#news') is not null drop table #news
create table #news (id int,keyword nvarchar(4000))
insert into #news
select 1,'十里平湖霜满天 ¦犹抱琵琶半遮面 ¦问君何所之 ¦寸寸青丝愁华年 ¦东游西荡 ¦对月形单望相互 ¦玄天邪帝 ¦只羡鸳鸯不羡仙 ' union all
select 2,'a¦b¦c'if object_id('tempdb.dbo.#Temp') is not null drop table #Temp
select top 8000 id = identity(int, 1, 1) into #Temp from syscolumns, sysobjects
select a.id, keyword = substring(a.keyword + '¦', b.id, charindex('¦', a.keyword + '¦', b.id + 1) - b.id) from #news a inner join #Temp b on substring('¦' + a.keyword, b.id, 1) = '¦'/*
id keyword
----------- --------------
1 十里平湖霜满天
1 犹抱琵琶半遮面
1 问君何所之
1 寸寸青丝愁华年
1 东游西荡
1 对月形单望相互
1 玄天邪帝
1 只羡鸳鸯不羡仙
2 a
2 b
2 c
*/
那一长串中的第一个
wzy_love_sly 老师
你曾经给我一个函数可以做到,直接用这种临时表的方法,会不会更加好些呢,能有代码吗? 谢谢各位老师了.
FROM @tb a
INNER JOIN # b
ON SUBSTRING(s+'¦',id,1)='¦'
where name='名字'
没有就
SELECT RIGHT(stuff(s+'¦',id,len(s),''),charindex('¦',reverse(stuff('¦'+s+'¦',id,len(s),'')))) as '结果'
FROM (select top 1 * from @tb) a
INNER JOIN # b
ON SUBSTRING(s+'¦',id,1)='¦'把@a换成你自己的表名就行了
列名 'id' 不明确。
列名 's' 无效。
列名 's' 无效。
列名 'id' 不明确。
列名 's' 无效。
列名 's' 无效。
列名 'id' 不明确。
列名 's' 无效。SELECT RIGHT(stuff(s+'¦',id,len(s),''),charindex('¦',reverse(stuff('¦'+s+'¦',id,len(s),'')))) as '结果'
FROM (select top 1 * from News) a
INNER JOIN # b
ON SUBSTRING(s+'¦',id,1)='¦'
WHERE a.ID=87
xx
adf
adasdf
....第二想仅仅列出第一个 如
xx
id都改 b.id把s改成你news的字段名
怎么也不能直接用啊!!还有就是把临时表也键上才行,要觉的临时表不好用,就键个固定表
再不会把你qq号帖上
#是临时表 s是@tb的列,你无法调用是因为不存在临时表关系吧!
比如:
RIGHT (Transact-SQL) 发送反馈
请参阅
全部折叠全部展开 语言筛选器: 全部语言筛选器: 多语言语言筛选器: Visual Basic语言筛选器: C#语言筛选器: C++语言筛选器: J#语言筛选器: JScript
Visual Basic(Declaration)
C#
C++
J#
JScript返回字符串中从右边开始指定个数的字符。 Transact-SQL 语法约定语法
RIGHT ( character_expression , integer_expression )
备注
兼容级别可能影响返回值。有关详细信息,请参阅 sp_dbcmptlevel (Transact-SQL)。参数
character_expression字符或二进制数据表达式。character_expression 可以是常量、变量或列。character_expression 可以是任何能够隐式转换为 varchar 或 nvarchar 的数据类型,但 text 或 ntext 除外。否则,请使用 CAST 函数对 character_expression 进行显式转换。integer_expression 正整数,指定 character_expression 将返回的字符数。如果 integer_expression 为负,则会返回错误。integer_expression 可以是 bigint 类型。返回类型
varchar 或 nvarchar示例
以下示例返回每个联系人名字中最右边的五个字符。 复制代码
USE AdventureWorks;
GO
SELECT RIGHT(FirstName, 5) AS 'First Name'
FROM Person.Contact
WHERE ContactID < 5
ORDER BY FirstName;
GO
下面是结果集: 复制代码
First Name
----------
erine
stavo
berto
Kim(4 row(s) affected) 请参阅
参考
CAST 和 CONVERT (Transact-SQL)
数据类型 (Transact-SQL)
字符串函数 (Transact-SQL)
帮助和信息
获取 SQL Server 2005 帮助文档反馈
Microsoft 非常重视您的反馈。若要对该主题分级并将对该主题的反馈发送到文档编写组,请单击一个分级,再单击“发送反馈”。要想获得有关支持方面的问题的协助,请参阅包含在该产品中的技术支持信息。
不好 1
2
3
4
5
出色
若要将反馈通过电子邮件发送给 Microsoft,请单击此处:
(C) 2005 Microsoft Corporation。保留所有权利。