Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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
如何使用4个相同的连续字符在SQL中生成子字符串_Sql_Sql Server - Fatal编程技术网

如何使用4个相同的连续字符在SQL中生成子字符串

如何使用4个相同的连续字符在SQL中生成子字符串,sql,sql-server,Sql,Sql Server,我想将子字符串11.1.2.3.4.5或10.1.2.4.5等拆分到4(点),就像11.1.2.3和10.1.2.3一样 有人能在SQL中帮助实现这一点吗?您可以使用如下递归CTE CREATE TABLE Strings( S VARCHAR(25) ); INSERT Strings VALUES ('1.2.3.4.5.6'), ('11.2.12.5.66'), ('y.888.p.666.2.00'); WITH CTE AS ( SELECT 1 N, CHARINDEX('

我想将子字符串
11.1.2.3.4.5
10.1.2.4.5
等拆分到4(点),就像
11.1.2.3
10.1.2.3
一样


有人能在SQL中帮助实现这一点吗?

您可以使用如下递归CTE

CREATE TABLE Strings( S VARCHAR(25) );

INSERT Strings VALUES
('1.2.3.4.5.6'),
('11.2.12.5.66'),
('y.888.p.666.2.00');

WITH CTE AS
(
  SELECT 1 N, CHARINDEX('.', S) Pos, S
  FROM Strings 
  UNION ALL
  SELECT N + 1, CHARINDEX('.', S, Pos + 1), S
  FROM CTE
  WHERE Pos > 0
)
SELECT S, SUBSTRING(S, 1, Pos - 1) --or use LEFT()
FROM CTE
WHERE N = 4;
或者使用嵌套的
CHARINDEX()
作为

SELECT S, LEFT(S, CI-1)
FROM Strings
CROSS APPLY
(
  VALUES
  (CHARINDEX('.', S, CHARINDEX('.', S, CHARINDEX('.', S, CHARINDEX('.', S)+1)+1)+1))
) T(CI)

这里有一个

欢迎来到StackOverflow!你的问题需要一些工作,以便社区能够更好地帮助你。请看一看并再试一次。您尝试使用
子字符串
时没有成功的地方是什么?