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 是什么?另外咨询一下,如果仅取出第一个代码又该怎么写呢?

解决方案 »

  1.   

    >>上面的@tb s a b 是什么如果连这都不知道是什么,那你还是从头学吧,不要直接看复杂的东西了
      

  2.   

    关键是我调用都不会我猜想 @ta是一个表 @ta a是这个表的别名 # b是什么意思不知道 那个#号不知道.估计b也是个别名s猜想是个变量 navchar型号的.不过我不会调用另外能告诉我如何调用,和另外一个只输出第一个的方法吗?
      

  3.   

    我是在初学阶段,各位老师们不要生气,我这些天都在捣鼓这些东西SQL最基本的东西看了好几遍了很少有教程提及像这样的
    RIGHT(stuff(s+'¦',id,len(s),''),charindex('¦',reverse(stuff('¦'+s+'¦',id,len(s),'')))) stuff,reverse的关键字教程.
      

  4.   

    select top 1000 id=identity(int,1,1) into # from sysobjects a,sysobjects b
    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)='¦'十里平湖霜满天
    犹抱琵琶半遮面
    问君何所之
    寸寸青丝愁华年
    东游西荡
    对月形单望相互
    玄天邪帝
    只羡鸳鸯不羡仙
    论坛

    和谐
      

  5.   

    --> 测试数据: #news
    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
    */
      

  6.   

    另外还没有告诉我 如何只要列出
    那一长串中的第一个
    wzy_love_sly 老师
    你曾经给我一个函数可以做到,直接用这种临时表的方法,会不会更加好些呢,能有代码吗? 谢谢各位老师了.
      

  7.   

    还有其他字段吗?比如有个name列,可以在最后加个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)='¦'
    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换成你自己的表名就行了
      

  8.   

    老师给的两个都不行第一个可以运行,不报错误,提示1000行受影响 没有出来结果第二个我改成这样 ,提示 
    列名 '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
      

  9.   

    表情况是这样的!News下有一个字段 keyword 里面储存着类似 |xx|sdf|adasdf|234|sagf|dg|sd|sdfg|xgf|第一想全部列出
    xx
    adf
    adasdf
    ....第二想仅仅列出第一个 如
    xx
      

  10.   

    你把除最后WHERE a.ID=87的其他
    id都改    b.id把s改成你news的字段名
    怎么也不能直接用啊!!还有就是把临时表也键上才行,要觉的临时表不好用,就键个固定表
    再不会把你qq号帖上
      

  11.   

    @tb是表变量
    #是临时表 s是@tb的列,你无法调用是因为不存在临时表关系吧!
      

  12.   

    请用联机帮助
    比如:
    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。保留所有权利。