Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 2005-如何选择字符串的特定部分?_Sql_Sql Server 2005 - Fatal编程技术网

SQL Server 2005-如何选择字符串的特定部分?

SQL Server 2005-如何选择字符串的特定部分?,sql,sql-server-2005,Sql,Sql Server 2005,我有字符串&string=45646874&v1=67&v2=test,我想从中获取字符串45646874,有时此提取将包含8个字符,有时7有时5等等 因此,我需要在&string=45646874&v1=67&v2=test中搜索,并获取string=之后和下一个&之前的所有内容。SQL Server没有任何内置的正则表达式提取支持,但我们可以使用基本字符串函数如下处理此问题: WITH cte AS ( SELECT '&string=45646874&v1=67&a

我有字符串&string=45646874&v1=67&v2=test,我想从中获取字符串45646874,有时此提取将包含8个字符,有时7有时5等等


因此,我需要在&string=45646874&v1=67&v2=test中搜索,并获取string=之后和下一个&

之前的所有内容。SQL Server没有任何内置的正则表达式提取支持,但我们可以使用基本字符串函数如下处理此问题:

WITH cte AS (
    SELECT '&string=45646874&v1=67&v2=test' AS col UNION ALL
    SELECT 'blah blah &string=ABCDEF123&v1=hello&v2=goodbye'
)

SELECT
    SUBSTRING(col, CHARINDEX('&string=', col) + 8,
              CHARINDEX('&', col, CHARINDEX('&string=', col) + 1) -
              CHARINDEX('&string=', col) - 8) AS output
FROM cte;

您可以尝试此查询

DECLARE @String varchar(100)= '&string=45646874&v1=67&v2=test'
SELECT SUBSTRING(@string,(CHARINDEX('string=',@string)+7),(CHARINDEX('&',@string,2)-(CHARINDEX('string=',@string)+7)))

嘿,Tim,我必须在Salesforce Marketing Cloud中完成这项工作,这有一些限制,考虑到SQL对查询活动的支持是基于SQL Server 2005功能的。如果构造案例语句函数大多数函数(即最小值、最大值),则仅选择要在帐户或父帐户嵌套查询联合联接组中使用条件语句进行数据扩展或数据视图的语句是否支持强制转换和转换不支持的元素变量游标用户定义函数事务和锁定转到在SQL Server 2005上打印任何sp_*存储过程EXEC临时表和公用表表达式文本和图像函数,无需
CHARINDEX
支持,我不确定是否有解决方案,除非我们对查询字符串进行假设。
&v1
是否始终遵循
&string
参数?我们可以使用charindex,有时会使用
&string=45646874&v1=67&v2=tes
,或者
&string=45646874&v2=tes&v1=67
,或者
&string=45646874&v8=tes&v1=67
,但是我们将始终使用
字符串=
一些数字
&
@FelipeJordani如果您可以使用
CHARINDEX
,那么无论查询参数出现在何处,我的答案都适用于您。忽略您在上述CTE中看到的所有
联合
。这仅用于测试目的,以便您可以将我的答案直接剪切并粘贴到SQL Server中。