在使用sql子字符串之前获取字符串?

在使用sql子字符串之前获取字符串?,sql,sql-server,substring,Sql,Sql Server,Substring,这是我正在使用的字符串 SET @str = 025-121-3453 我想使用sql获取表达式前后的部分字符串 假设是这样的 SELECT SUBSTRING(String, LEN(LEFT(String, CHARINDEX ('121', String))) + 1, LEN(String) - LEN(LEFT(String, CHARINDEX ('121', String))) - LEN(RIGHT(String, LEN(String) - CHA

这是我正在使用的字符串

   SET  @str = 025-121-3453
我想使用sql获取表达式前后的部分字符串

假设是这样的

  SELECT SUBSTRING(String, 
 LEN(LEFT(String, CHARINDEX ('121', String))) + 1, LEN(String) 
- LEN(LEFT(String,
 CHARINDEX ('121', String))) - LEN(RIGHT(String, LEN(String) -

   CHARINDEX ('121', String))) - 1) FROM StringPatternData WHERE String =  '025-121-3453';
输出


in 1查询输出将为“025-”&在另一个'-3453'

中,您可以使用一些内置函数来实现这一点:

DECLARE @str VARCHAR(100) = '025-121-3453'

SELECT  LEFT(@str, CHARINDEX('121', @str) - 1) ,
        RIGHT(@str, CHARINDEX('121', REVERSE(@str)) - 1)

请注意,您必须在查询的第二部分中提供反向模式。也就是说,如果按123拆分,第二个模式应该是321。

为了好玩,这里是另一种方法

DECLARE @str VARCHAR(100) = '025-121-3453'

select PARSENAME(replace(@str, '-', '.'), 3)
    , PARSENAME(replace(@str, '-', '.'), 1)

你的问题不清楚。试着解释一下你想要做什么。现在非常清楚具体文本前的字符串你想要212 485-1057的哪一部分?212和1057之间的部分?因此:485就是你想要的?我想这是伊斯坦布尔的一个电话号码,你想要没有区号的电话号码吗?预期的输出是什么?不需要乐趣我有其他字符串这意味着什么?谢谢。。。。。。。。。。。。。。。。。。。。。