我有一列数据,其中包含具有以下格式的字符串:
blablablabla(XYZ)
我想丢弃()之外的所有内容 - 以及括号本身 - 并使用()中的值设置更新该字段。这意味着,在这种特殊情况下,“blablabla”将被丢弃,并且该条目仅包含XYZ。
我知道我必须使用SQL UPDATE,但我不确定如何正确构建where条件。
非常感谢, 哈尔
编辑:我忘了说它是在SQL Server 2008中。 谢谢大家的答案,他们都工作了(我测试过)。太糟糕了,我无法将所有标记为正确。我真的很惊讶,答案都很快。答案 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