在SQL Server中提取字符串的一部分
我有一个字段,它以这种格式返回字符串值在SQL Server中提取字符串的一部分,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个字段,它以这种格式返回字符串值xxxxxxx(xxxxx)。现在我需要提取()内字符串的内容以及()之前的内容。如何实现此目标?请尝试: declare @var nvarchar(100)='xxxxxxx(xxxxx)' select @var, LEFT(@var, charindex('(', @var, 1)-1), replace(right(@var, charindex('(', @var, 1)-1), ')', '') ` 我对sql serv
xxxxxxx(xxxxx)
。现在我需要提取()内字符串的内容以及()之前的内容。如何实现此目标?请尝试:
declare @var nvarchar(100)='xxxxxxx(xxxxx)'
select @var,
LEFT(@var, charindex('(', @var, 1)-1),
replace(right(@var, charindex('(', @var, 1)-1), ')', '')
`
我对sql server不太了解
在oracle中,您可以通过以下方式实现这一点:
SELECT SUBSTR('xxxxxxx(xxxxx)',0,instr('xxxxxxx(xxxxx)','(')-1) AS first_part,
SUBSTR('xxxxxxx(xxxxx)',instr('xxxxxxx(xxxxx)','(')+1,instr('xxxxxxx(xxxxx)',')')-instr('xxxxxxx(xxxxx)','(')-1) AS second_part
FROM dual;
因此,请尝试找到相应的语法。
substr
是不言自明的。
而
instr
返回给定字符串中字符第一次出现的位置。TEchDo answer是完美的,他只是遗漏了第二列的另一个replace
函数
declare @var nvarchar(100)='xxxxxxx(xxxxx)'
select @var AS Source, LEFT(@var, charindex('(', @var, 1)-1) AS FirstColumn,
replace(replace(right(@var, charindex('(', @var, 1)-1), ')',''),'(','') AS SecondColumn
所以你需要把这些值分成两列?那你的列设计得很糟糕。如果这些数据实际上是两个独立的数据段,那么它们应该存储在各自独立的列中。如果需要,您可以使用一个计算列,将它们组合在一起并添加括号,以便显示。是的,我需要它们作为两列。@techdoit不是一个设计糟糕的列。这只是客户的一个要求,即他们希望分离代码的某些部分@达米恩·不信者
declare @var nvarchar(100)='xxxxxxx(xxxxx)'
select @var AS Source, LEFT(@var, charindex('(', @var, 1)-1) AS FirstColumn,
replace(replace(right(@var, charindex('(', @var, 1)-1), ')',''),'(','') AS SecondColumn