Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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_Regex - Fatal编程技术网

Sql server 简化SQL输出中的行值

Sql server 简化SQL输出中的行值,sql-server,regex,Sql Server,Regex,我有SQL代码(节略) 我的输出如下所示 但我希望它看起来像这样,与站点“7”对应的所有行值都被求和,等等 我相信正则表达式会有帮助,因为 ^\w+(?:\s+\w+)?\\|[A-Z].*$ 将分隔“\”后面的数字 但是当我尝试用regex执行replace语句时 SELECT replace(replace(replace(replace(replace(dbo.IDENTITY_MAP.Name,'My Company\',''),'-VLAN2',''),'.VLAN2\','')

我有SQL代码(节略)

我的输出如下所示

但我希望它看起来像这样,与站点“7”对应的所有行值都被求和,等等

我相信正则表达式会有帮助,因为

^\w+(?:\s+\w+)?\\|[A-Z].*$
将分隔“\”后面的数字

但是当我尝试用regex执行replace语句时

SELECT replace(replace(replace(replace(replace(dbo.IDENTITY_MAP.Name,'My Company\',''),'-VLAN2',''),'.VLAN2\',''),'.Instr\',''), '^\w+(?:\s+\w+)?\\|[A-Z].*$') as Site,
我犯了一个错误

The replace function requires 3 argument(s).
请引导

另一个更新 我尝试了这个MS SQL代码(节略)

这就是输出


尝试函数,此处建议:

尝试函数,此处建议:

尝试函数,此处建议:

尝试函数,此处建议:

无需编写CLR库注入SQL server以添加正则表达式功能(您可以这样做,这只是一个麻烦:),你真的不能。SQL server不支持现有的正则表达式

您面临的基本问题是复制“站点”列中的数据。理想情况下,您应该有一个单独的“站点”表,其中包含名称、标识符和您感兴趣的较短数字,并将其作为外键添加到您要查询的表中


如果出于任何原因,您无法触及数据库的结构,那么我会将其视为一个表示问题,并在查询后进行分组。

无需编写CLR库以注入SQL server以添加正则表达式功能(您可以这样做,这只是一个麻烦:),您真的无法做到。SQL server不支持现有的正则表达式

您面临的基本问题是复制“站点”列中的数据。理想情况下,您应该有一个单独的“站点”表,其中包含名称、标识符和您感兴趣的较短数字,并将其作为外键添加到您要查询的表中


如果出于任何原因,您无法触及数据库的结构,那么我会将其视为一个表示问题,并在查询后进行分组。

无需编写CLR库以注入SQL server以添加正则表达式功能(您可以这样做,这只是一个麻烦:),您真的无法做到。SQL server不支持现有的正则表达式

您面临的基本问题是复制“站点”列中的数据。理想情况下,您应该有一个单独的“站点”表,其中包含名称、标识符和您感兴趣的较短数字,并将其作为外键添加到您要查询的表中


如果出于任何原因,您无法触及数据库的结构,那么我会将其视为一个表示问题,并在查询后进行分组。

无需编写CLR库以注入SQL server以添加正则表达式功能(您可以这样做,这只是一个麻烦:),您真的无法做到。SQL server不支持现有的正则表达式

您面临的基本问题是复制“站点”列中的数据。理想情况下,您应该有一个单独的“站点”表,其中包含名称、标识符和您感兴趣的较短数字,并将其作为外键添加到您要查询的表中



如果出于任何原因,您无法触及数据库的结构,那么我会将其视为一个表示问题,并在查询后进行分组。

天哪,这将花费相当长的时间。即使最终产品只有32行。。。。。。我无法触及DBMy Goods的结构,这将需要相当长的时间。即使最终产品只有32行。。。。。。我无法触及DBMy Goods的结构,这将需要相当长的时间。即使最终产品只有32行。。。。。。我无法触及DBMy Goods的结构,这将需要相当长的时间。即使最终产品只有32行。。。。。。我无法触摸DBIt的结构,它返回所有0。。。。。。我将检查我正在使用的模式,即,
^\w+(?:\s+\w+?\\\\\\\124;[A-Z].$
是的,总输出是1249行,但期望的结果是32行这不是您使用PATINDEX的方式,SQL Server不理解正则表达式。您需要使用PATINDEX和/或CHARINDEX,使用SQL Server模式搜索方法在字符串中查找您要查找的内容,该方法类似于您将在LIKE中使用的方法(请参见此:)。作为一种更简单的解决方案,如果您知道字符串始终符合特定规则(例如,反斜杠后的2个字符始终是站点编号)您可以只使用CHARINDEX和SUBSTRING来获取站点编号,如下所示:选择CAST(SUBSTRING('Bronx\07X001',CHARINDEX('\',@String,1)+1,2)让我们使用。它返回所有0……我将检查我正在使用的模式,即
^\w+(?:\s+\w+)\\\\\\\[A-Z].*$
是,总输出为1249行,但所需结果为32行这不是您使用PATINDEX的方式,SQL Server不理解正则表达式。您需要使用PATINDEX和/或CHARINDEX,使用SQL Server模式搜索方法(类似于您在LIKE中使用的方法)在字符串中查找内容(请参见此:)。作为一个更简单的解决方案,如果您知道字符串始终符合特定规则(例如,反斜杠后的2个字符始终是站点编号),则可以使用CHARINDEX和SUBSTRING来获取站点编号,如下所示:选择CAST(SUBSTRING('Bronx\07X001',CHARINDEX('\',@string,1)+1,2)让我们来看看。它返回所有0……我将检查我正在使用的模式,即
^\w+(?:\s+\w+)\\\\\\\\\[A-Z].*$
是,总输出为1249行,但所需结果为32行这不是您使用PATINDEX的方式,SQL Server不理解正则表达式。您需要使用PATINDEX和/或CHARINDEX,使用SQL Server模式搜索方法(类似于您在LIKE中使用的方法)在字符串中查找内容(请参见此:)。作为一个更简单的解决方案,如果您知道字符串始终符合特定规则(例如,反斜杠后的2个字符始终是站点编号),则可以仅使用CHARINDEX和SUBSTRING来获取sit
The replace function requires 3 argument(s).
SELECT patindex('^\w+(?:\s+\w+)?\\|[A-Z].*$',replace(replace(replace(replace(dbo.IDENTITY_MAP.Name,'My Company\',''),'-VLAN2',''),'.VLAN2\',''),'.Instr\','')) as Site,
                   Count (CASE
                            WHEN dbo.SEM_AGENT.AGENT_VERSION LIKE '11.%'
                                AND dbo.SEM_COMPUTER.OPERATION_SYSTEM LIKE 'Windows%' THEN 1
                          END) AS 'Windows-SEP-11',

......
            Group by patindex('^\w+(?:\s+\w+)?\\|[A-Z].*$',replace(replace(replace(replace(dbo.IDENTITY_MAP.Name,'My Company\',''),'-VLAN2',''),'.VLAN2\',''),'.Instr\',''))
            Order by Site