coo*_*tkm 29 sql sql-server substring
我需要一个SQL查询来获取两个已知字符串之间的值(返回的值应该以这两个字符串开头和结尾).
一个例子.
"我所知道的是,这条狗非常糟糕,无论其他人怎么想,都要立即受到严厉的惩罚."
在这种情况下,已知的字符串是"狗"和"立即".所以我的询问应该回归"狗一直非常糟糕,需要立刻进行严厉的惩罚"
到目前为止,我已经想出了这个,但无济于事:
SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text), CHARINDEX('immediately', @Text))
Run Code Online (Sandbox Code Playgroud)
@Text是包含主字符串的变量.
有人可以帮我解决我出错的地方吗?
org*_*ger 49
问题是你的substring参数的第二部分包括第一个索引.您需要从第二个索引中减去第一个索引才能使其工作.
SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text)
, CHARINDEX('immediately',@text) - CHARINDEX('the dog', @Text) + Len('immediately'))
Run Code Online (Sandbox Code Playgroud)
Mar*_*oll 11
一个例子是:你有一个字符串和字符$
字符串:
aaaaa$bbbbb$ccccc
Run Code Online (Sandbox Code Playgroud)
代码:
SELECT SUBSTRING('aaaaa$bbbbb$ccccc',CHARINDEX('$','aaaaa$bbbbb$ccccc')+1, CHARINDEX('$','aaaaa$bbbbb$ccccc',CHARINDEX('$','aaaaa$bbbbb$ccccc')+1) -CHARINDEX('$','aaaaa$bbbbb$ccccc')-1) as My_String
Run Code Online (Sandbox Code Playgroud)
输出:
bbbbb
Run Code Online (Sandbox Code Playgroud)
Dat*_*eur 10
我想Evan的意思是:
SELECT SUBSTRING(@Text, CHARINDEX(@First, @Text) + LEN(@First),
CHARINDEX(@Second, @Text) - CHARINDEX(@First, @Text) - LEN(@First))
Run Code Online (Sandbox Code Playgroud)
我也有类似的需求来解析存储在 IIS 日志的 csUriQuery 字段中的一组参数,它看起来像这样:id=3598308&user=AD\user¶meter=1&listing=No需要这种格式。
我最终创建了一个用户定义的函数来完成一个字符串,并有以下假设:
NULL则返回 a,并且这是代码:
CREATE FUNCTION dbo.str_between(@col varchar(max), @start varchar(50), @end varchar(50))
RETURNS varchar(max)
WITH EXECUTE AS CALLER
AS
BEGIN
RETURN substring(@col, charindex(@start, @col) + len(@start),
isnull(nullif(charindex(@end, stuff(@col, 1, charindex(@start, @col)-1, '')),0),
len(stuff(@col, 1, charindex(@start, @col)-1, ''))+1) - len(@start)-1);
END;
GO
Run Code Online (Sandbox Code Playgroud)
对于上面的问题,用法如下:
DECLARE @a VARCHAR(MAX) = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.'
SELECT dbo.str_between(@a, 'the dog', 'immediately')
-- Yields' had been very bad and required harsh punishment '
Run Code Online (Sandbox Code Playgroud)
您需要在SUBSTRING中调整LENGTH.你把它指向'结束字符串'的END.
尝试这样的事情:
declare @TEXT varchar(200)
declare @ST varchar(200)
declare @EN varchar(200)
set @ST = 'the dog'
set @EN = 'immediately'
set @TEXT = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.'
SELECT SUBSTRING(@Text, CHARINDEX(@ST, @Text), (CHARINDEX(@EN, @Text)+LEN(@EN))-CHARINDEX(@ST, @Text))
Run Code Online (Sandbox Code Playgroud)
当然,您可能需要稍微调整一下.
我有一种感觉,您可能需要 SQL Server 的 PATINDEX() 函数。看一下这个:
所以也许:
SELECT SUBSTRING(@TEXT, PATINDEX('%the dog%', @TEXT), PATINDEX('%immediately%',@TEXT))
Run Code Online (Sandbox Code Playgroud)
小智 5
试试这个,用你的字符串替换'['&']'
SELECT SUBSTRING(@TEXT,CHARINDEX('[',@TEXT)+1,(CHARINDEX(']',@TEXT)-CHARINDEX('[',@TEXT))-1)
Run Code Online (Sandbox Code Playgroud)
小智 5
SELECT
SUBSTRING( '123@yahoo.com', charindex('@','123@yahoo.com',1) + 1, charindex('.','123@yahoo.com',1) - charindex('@','123@yahoo.com',1) - 1 )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170630 次 |
| 最近记录: |