Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中提取字符串的一部分_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

在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