Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 - Fatal编程技术网

Sql server 使用SQL进行字符串拆分

Sql server 使用SQL进行字符串拆分,sql-server,Sql Server,我正在使用MS SQL Server Management Studio v17 我有一个字符串: Primary sector: General Industries Group Sub-sector: Chemicals (incl. agri businesses) Tier:6 预期产量 主要部门 通用工业集团 子扇区 化学品 我想计算两个新变量-Primary_Sector和Sub_Sector,它们分别包含通用工业集团和化学品。你知道推断文本的最佳方法是什么吗?我会怎么做?我认为通

我正在使用MS SQL Server Management Studio v17

我有一个字符串:

Primary sector: General Industries Group Sub-sector: Chemicals (incl. agri businesses) Tier:6
预期产量

主要部门
通用工业集团

子扇区
化学品


我想计算两个新变量-
Primary_Sector
Sub_Sector
,它们分别包含
通用工业集团
化学品
。你知道推断文本的最佳方法是什么吗?我会怎么做?

我认为通过子字符串进行推断非常简单:

DECLARE @x NVARCHAR(100) = 'Primary sector: General Industries Group Sub-sector: Chemicals (incl. agri businesses) Tier:6';

DECLARE @l INT = LEN(@x);
DECLARE @iTier INT = CHARINDEX('Tier:', @x)
DECLARE @iSubSector INT = CHARINDEX('Sub-sector:', @x)
DECLARE @iPrimarySector INT = CHARINDEX('Primary sector:', @x)

SELECT 'Tier = ' +  SUBSTRING(@x, @iTier+5, @l-(@iTier+5)+1)
SELECT 'SubSector = ' + SUBSTRING(@x, @iSubSector+11, @iTier-(@iSubSector+11))
SELECT 'PrimarySector = ' + SUBSTRING(@x, @iPrimarySector+15, @iSubSector-(@iPrimarySector+15))
试试这个

DECLARE @Tabl AS TABLE(data nvarchar(max))
INSERT INTO @Tabl
SELECT 'Primary sector: General Industries Group Sub-sector: Chemicals (incl. agri businesses) Tier:6'

SELECT  data,
        [Primary sector],
        SUBSTRING([Sub-sector],1,CHARINDEX(')',[Sub-sector]))AS [Sub-sector],
        Tier 
FROM
(
SELECT data,
        REPLACE(SUBSTRING(data,0,CHARINDEX('Sub-sector:',data)),':',' = ') AS [Primary sector],
        REPLACE(SUBSTRING(data,CHARINDEX('Sub-sector:',data),LEN(data)),':',' = ') AS [Sub-sector]
        ,RIGHt(data,LEn('Tier:')+1) AS [Tier]
 FROM @Tabl
 )dt

演示结果:

您使用的是哪个版本的SQL Server?请注意,SQL Server的版本和SQL Server Management Studio的版本可能不同。另外,您是只想解析这个特定的字符串,还是想在更大的数据库上寻找更通用的东西?另外,到目前为止,您尝试了什么?您好,服务器是2017版本。我正在寻找一种更通用的更大数据库,但如果我能理解如何转换上述示例字符串,我应该能够在更大范围内找到它。一直在尝试substring和charindex。似乎没有清理示例中的数据。请添加您的预期输出为什么不想将
(包括农业企业)
包含在您的
子部门中
值?是否所有可能的输出值都需要忽略括号内的文本?我还假设
Tier
是一个不同的值,您在这个特定字符串中忽略了它?