SQL Update - 里面的一切()

时间:2009-04-16 15:47:27

标签: sql sql-server tsql sql-server-2008

我有一列数据,其中包含具有以下格式的字符串:

blablablabla(XYZ)

我想丢弃()之外的所有内容 - 以及括号本身 - 并使用()中的值设置更新该字段。这意味着,在这种特殊情况下,“blablabla”将被丢弃,并且该条目仅包含XYZ。

我知道我必须使用SQL UPDATE,但我不确定如何正确构建where条件。

非常感谢, 哈尔

编辑:我忘了说它是在SQL Server 2008中。 谢谢大家的答案,他们都工作了(我测试过)。太糟糕了,我无法将所有标记为正确。我真的很惊讶,答案都很快。

4 个答案:

答案 0 :(得分:5)

MySQL

UPDATE  mytable
SET     column = SUBSTRING(column, INSTR(column, '(') + 1, INSTR(column, ')') - INSTR(column, '(') - 1)
WHERE   column RLIKE ('\\(.*\\)')

答案 1 :(得分:4)

这假设正好有一对正确嵌套的括号(并且是T-SQL语法):

DECLARE @bla VARCHAR(50)
SET @bla = 'blablablabla(XYZ)asdsdsad'

SELECT SUBSTRING(
         @bla, 
         CHARINDEX('(', @bla) + 1, 
         CHARINDEX(')', @bla) - CHARINDEX('(', @bla) - 1
       )

收率:

'XYZ'

编辑:这会检查各种格式不正确的字符串,并且可以在WHERE子句中使用(例如WHERE ... <> 'no match'):

SELECT
  CASE 
    WHEN 
      /* check for '(' and ')' */
      CHARINDEX('(', @bla) > 0 AND CHARINDEX(')', @bla) > CHARINDEX('(', @bla)
      /* check for 'bla(bla(XYZ)bla' */
      AND CHARINDEX('(', @bla, CHARINDEX('(', @bla) + 1) = 0
      /* check for 'bla(XYZ)bla)bla' */
      AND CHARINDEX(')', @bla, CHARINDEX(')', @bla) + 1) = 0
    THEN SUBSTRING(@bla, 
          CHARINDEX('(', @bla) + 1, 
          CHARINDEX(')', @bla) - CHARINDEX('(', @bla) - 1
        ) 
    ELSE 'no match'
  END

答案 2 :(得分:3)

MSSQL解决方案。您正在寻找的功能是CharIndex 名为test的简单表包含一个名为[name]

的列

要插入条目的代码

INSERT INTO TEST (name) VALUES ('SomeString(test1)')
INSERT INTO TEST (name) VALUES ('test2')
INSERT INTO TEST (name) VALUES ('SomeOtherString(test3)')
INSERT INTO TEST (name) VALUES ('test4')

查找相关条目的SQL代码

SELECT *, 
    charindex('(', name), 
    charindex(')', name),
    substring(
        name,
        charindex('(', name) + 1,
        charindex(')', name) - charindex('(', name) - 1
    )
FROM 
    TEST 
WHERE 
    name like '%(%)%'

更新条目的SQL代码

UPDATE 
    TEST
SET
    name = substring(
        name,
        charindex('(', name) + 1,
        charindex(')', name) - charindex('(', name) - 1
    )
WHERE
    name like '%(%)%'

答案 3 :(得分:2)

用于sql server

declare @x  varchar(100)

set @X= 'fgjfkfgkjz(12345)'
set @X= '()'
set @X= '(1234)'
set @X= 'fgjfkfgkjz()dfddf'
set @X= 'fgjfkfgkjz(123)dfddf'

PRINT '>>'+SUBSTRING(@x,CHARINDEX('(',@x)+1,CHARINDEX(')',@x)-(CHARINDEX('(',@x))-1)+'<<'

更新命令:

UPDATE YourTable
    SET YourColumn=SUBSTRING(YourColumn,CHARINDEX('(',YourColumn)+1,CHARINDEX(')',YourColumn)-(CHARINDEX('(',YourColumn))-1)
    WHERE xxx=yyy