【问题标题】:SQL Server : Select without some wordSQL Server:选择不带字
【发布时间】:2015-03-18 09:24:35
【问题描述】:

我有这样的程序;

SET @Oldname = (SELECT name 
                FROM [Marketing].[dbo].[_Users] 
                WHERE ID = @MID);

一切正常,但有些成员得到了 xxx, xxx_A1,xxx_A2,xxx_A3,在选择这些成员时我想选择没有 _A1 , _A2 , A_30

如何选择?

【问题讨论】:

  • 谷歌拆分字符串函数

标签: sql-server select procedure


【解决方案1】:

尝试反转字符串,找到_ 的第一个索引并应用子字符串:

DECLARE @s NVARCHAR(MAX) = 'John_Smith_234'

DECLARE @t TABLE ( Name NVARCHAR(50) )
INSERT  INTO @t
VALUES  ( 'John_Smith_234' ),
        ( 'Michael_Jordan' ),
        ( 'Honore_De_Balzak_234' )

SELECT  SUBSTRING(Name, 1, LEN(Name) - CHARINDEX('_', REVERSE(Name))) AS Name
FROM    @t

输出:

Name
John_Smith
Michael
Honore_De_Balzak

【讨论】:

    【解决方案2】:

    试试这个

    select left(name, len(name)-charindex('_', reverse(name))) name 
    from whatever
    

    【讨论】:

      【解决方案3】:

      确保在@MID 变量中添加一个“%”符号,看起来像“xxx%”

      用 LIKE 代替 = 的 SELECT :

      SET @Oldname = (SELECT name From [Marketing].[dbo].[_Users] Where ID LIKE @MID);
      

      我认为您也可以在 qour 查询中添加 '%' 符号(没有尝试过):

      SET @Oldname = (SELECT name From [Marketing].[dbo].[_Users] Where ID LIKE @MID+'%');
      

      【讨论】:

      • :) 我想选择不带“_154”或类似的。
      • 对不起,我想我误解了一些东西 ;-) xxx, xxx_A1,xxx_A2,xxx_A3 是您选择的“名称”列的值,您希望在 '_ 后面不带字符来获取它们' ?所以名字是'xxx_A1',你的选择应该返回'xxx'作为名字?还是我还是错了:-o
      • @Helmut 一些成员名称,例如“John_Sm_3 或 xxx_xxx_xxx_test5”,我想选择直到最后一个“_”。我只想选择“John_Sm”或“xxx_xxx_xxx”。谢谢:)
      • 好的,看来我现在明白了 ;-) 我已经看到你的问题已经回答了,使用字符串的 CHARINDEX、REVERSE 和 LEN。
      猜你喜欢
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      相关资源
      最近更新 更多