문자열에서 문자의 모든 위치를 검색하고 쉼표로 구분 된 문자열로 반환

사명

VARCHAR(255)0 또는 1 만 포함 된 문자열 ( )이 있습니다.
모든 위치를 검색하고 쉼표로 구분 된 문자열로 반환해야합니다. https://dba.stackexchange.com/questions/41961/how-to-find-all-positions-of-a-string-within-another-string의 솔루션을 사용하여 두 개의 쿼리를 작성했습니다.

지금까지 내 코드는 다음과 같습니다.

DECLARE @TERM VARCHAR(5);
SET @TERM = '1';
DECLARE @STRING VARCHAR(255);
SET @STRING = '101011011000000000000000000000000000000000000000';

DECLARE @RESULT VARCHAR(100);
SET @RESULT = '';

SELECT
   @RESULT = @RESULT + CAST(X.pos AS VARCHAR(10)) + ','
FROM
   ( SELECT
      pos = Number - LEN(@TERM)
     FROM
      ( SELECT
         Number
        ,Item = LTRIM(RTRIM(SUBSTRING(@STRING, Number, CHARINDEX(@TERM, @STRING + @TERM, Number) - Number)))
        FROM
         ( SELECT ROW_NUMBER () OVER (ORDER BY [object_id]) FROM sys.all_objects
         ) AS n ( Number )
        WHERE
         Number > 1
         AND Number <= CONVERT(INT, LEN(@STRING))
         AND SUBSTRING(@TERM + @STRING, Number, LEN(@TERM)) = @TERM
      ) AS y
   ) X;

SELECT
   SUBSTRING(@RESULT, 0, LEN(@RESULT));



DECLARE @POS INT;
DECLARE @OLD_POS INT;
DECLARE @POSITIONS VARCHAR(100);
SELECT
   @POSITIONS = '';
SELECT
   @OLD_POS = 0;
SELECT
   @POS = PATINDEX('%1%', @STRING); 
WHILE @POS > 0
   AND @OLD_POS <> @POS
   BEGIN
      SELECT
         @POSITIONS = @POSITIONS + CAST(@POS AS VARCHAR(2)) + ',';
      SELECT
         @OLD_POS = @POS;
      SELECT
         @POS = PATINDEX('%1%', SUBSTRING(@STRING, @POS + 1, LEN(@STRING))) + @POS;
   END;
SELECT
   LEFT(@POSITIONS, LEN(@POSITIONS) - 1);

이것이 더 빠르고 더 잘 할 수 있는지 궁금합니다. 단일 문자 위치 만 검색하고 있으며 문자열 (0 및 1)에 나타날 수있는 문자가 두 개뿐입니다.

이 코드를 사용하여 두 개의 함수를 빌드하고 1000 개의 레코드에 대해 실행하고 동일한 결과를 얻었으므로 어느 것이 더 좋은지 알 수 없습니다.

단일 레코드의 경우 두 번째 부분은 CPU를 제공하고 프로파일 러에서 읽기는 0과 같습니다. 여기서 첫 번째 코드는 CPU = 16이고 읽기 = 17입니다.

다음과 같은 결과를 얻을 필요가 있습니다. 1,3,5,6,8,9(여러 번 발생하는 경우), 3단일 발생에 NONE대해 하나도없는 경우.

조르기 나케 우리

일부 tally표 및 xml솔루션 :

DECLARE @STRING NVARCHAR(100) = '101011011000000000000000000000000000000000000000';

;with cte as(select ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) p 
             from (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) t1(n) cross join
                  (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) t2(n) cross join
                  (values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) t3(n))
SELECT STUFF((SELECT  ',' + CAST(p AS VARCHAR(100))
              FROM cte
              WHERE p <= LEN(@STRING) AND SUBSTRING(@STRING, p, 1) = '1'
              FOR XML PATH('')), 1, 1, '')

1에서 1000까지의 숫자를 생성하고 (문자열 길이가 더 크면 더 많은 조인을 추가) substring함수 필터에 필요한 값을 생성합니다. 그런 다음 행을 쉼표로 구분 된 값으로 연결하는 표준 트릭입니다.

이전 버전의 경우 :

;with cte as(SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) p
             FROM sys.all_columns a CROSS JOIN sys.all_columns b)
SELECT STUFF((SELECT  ',' + CAST(p AS VARCHAR(100))
              FROM cte
              WHERE p <= LEN(@STRING) AND SUBSTRING(@STRING, p, 1) = '1'
              FOR XML PATH('')), 1, 1, '')

다음은 범위 생성에 대한 좋은 기사입니다. http://dwaincsql.com/2014/03/27/tally-tables-in-t-sql/

편집하다:

;with cte as(SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) p
               FROM (SELECT 1 AS rn UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) t1 CROSS JOIN 
                (SELECT 1 AS rn UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) t2 CROSS JOIN 
                (SELECT 1 AS rn UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) t3 CROSS JOIN 
                (SELECT 1 AS rn UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) t4 CROSS JOIN 
                (SELECT 1 AS rn UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) t5 CROSS JOIN 
                (SELECT 1 AS rn UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 ) t6)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

쉼표로 구분 된 문자열의 모든 필드를 분할하고 반환하는 SSRS 식

분류에서Dev

문자열 내에서 정규식 쉼표로 구분 된 하위 문자열

분류에서Dev

쉼표로 구분 된 문자열 속성을 반복하고, 문자열을 분할하고, 모든 고유 값에서 ICollection을 만드는 방법

분류에서Dev

mysql에서 LIKE를 사용하여 쉼표로 구분 된 문자열 검색

분류에서Dev

목록에서 하위 문자열을 검색하고 일치하는 모든 결과를 쉼표로 구분하여 제공

분류에서Dev

쉼표로 구분 된 문자열을 C에서 문자열 배열로 변환하는 방법

분류에서Dev

mongodb에서 쉼표로 구분 된 문자열 필드를 배열로 변환하는 방법

분류에서Dev

PHP : mysql에서 쉼표로 구분 된 문자열 검색?

분류에서Dev

int []를 쉼표로 구분 된 문자열로 변환

분류에서Dev

Postgresql에서 쉼표로 구분 된 값으로 하위 문자열 추출

분류에서Dev

모든 행에 대해 R에서 쉼표로 구분 된 문자열 분할

분류에서Dev

쉼표로 구분 된 문자열을 작은 따옴표로 묶고 쉼표로 구분 한 문자열 문자열로 변환하는 방법

분류에서Dev

문자열 기반 SQL 검색 쿼리-쉼표로 구분 된 숫자

분류에서Dev

값만으로 쉼표로 구분 된 문자열 반환

분류에서Dev

RegEx-쉼표로 구분 된 문자열에서 하위 문자열을 포함하는 단어 추출

분류에서Dev

문자열에서 쉼표로 구분 된 모든 값에 대한 MySQL 쿼리

분류에서Dev

CTE를 사용하여 쉼표로 구분 된 문자열

분류에서Dev

쉼표로 구분 된 문자열에서 중복 항목의 색인 위치 찾기

분류에서Dev

XPATH를 사용하여 쉼표로 구분 된 문자열 구문 분석

분류에서Dev

배열을 반복하고 쉼표로 구분 된 문자열에 내용을 추가하지만 최신 항목에서는 쉼표를 건너 뜁니다.

분류에서Dev

쉼표로 구분 된 문자열의 중간에서 밑줄로 구분 된 하위 문자열을 바꿉니다.

분류에서Dev

PHP의 트리에서 쉼표로 구분 된 값으로 문자열 변환

분류에서Dev

string. Linq 쿼리를 결합하여 배열에서 두 개의 문자열을 병합하고 단일 쉼표로 구분 된 문자열로 출력

분류에서Dev

문자열의 단어 당 문자 수를 계산하여 쉼표로 구분 된 값을 반환하는 방법이 있습니까?

분류에서Dev

SQL Server에서 테이블의 정수 행을 쉼표로 구분 된 문자열로 변환하는 방법

분류에서Dev

배열을 쉼표로 구분 된 문자열로 변환

분류에서Dev

쉼표로 구분 된 문자열을 배열로 변환

분류에서Dev

배열을 쉼표로 구분 된 문자열로 변환

분류에서Dev

json 객체에서 쉼표로 구분 된 문자열을 배열로 변환

Related 관련 기사

  1. 1

    쉼표로 구분 된 문자열의 모든 필드를 분할하고 반환하는 SSRS 식

  2. 2

    문자열 내에서 정규식 쉼표로 구분 된 하위 문자열

  3. 3

    쉼표로 구분 된 문자열 속성을 반복하고, 문자열을 분할하고, 모든 고유 값에서 ICollection을 만드는 방법

  4. 4

    mysql에서 LIKE를 사용하여 쉼표로 구분 된 문자열 검색

  5. 5

    목록에서 하위 문자열을 검색하고 일치하는 모든 결과를 쉼표로 구분하여 제공

  6. 6

    쉼표로 구분 된 문자열을 C에서 문자열 배열로 변환하는 방법

  7. 7

    mongodb에서 쉼표로 구분 된 문자열 필드를 배열로 변환하는 방법

  8. 8

    PHP : mysql에서 쉼표로 구분 된 문자열 검색?

  9. 9

    int []를 쉼표로 구분 된 문자열로 변환

  10. 10

    Postgresql에서 쉼표로 구분 된 값으로 하위 문자열 추출

  11. 11

    모든 행에 대해 R에서 쉼표로 구분 된 문자열 분할

  12. 12

    쉼표로 구분 된 문자열을 작은 따옴표로 묶고 쉼표로 구분 한 문자열 문자열로 변환하는 방법

  13. 13

    문자열 기반 SQL 검색 쿼리-쉼표로 구분 된 숫자

  14. 14

    값만으로 쉼표로 구분 된 문자열 반환

  15. 15

    RegEx-쉼표로 구분 된 문자열에서 하위 문자열을 포함하는 단어 추출

  16. 16

    문자열에서 쉼표로 구분 된 모든 값에 대한 MySQL 쿼리

  17. 17

    CTE를 사용하여 쉼표로 구분 된 문자열

  18. 18

    쉼표로 구분 된 문자열에서 중복 항목의 색인 위치 찾기

  19. 19

    XPATH를 사용하여 쉼표로 구분 된 문자열 구문 분석

  20. 20

    배열을 반복하고 쉼표로 구분 된 문자열에 내용을 추가하지만 최신 항목에서는 쉼표를 건너 뜁니다.

  21. 21

    쉼표로 구분 된 문자열의 중간에서 밑줄로 구분 된 하위 문자열을 바꿉니다.

  22. 22

    PHP의 트리에서 쉼표로 구분 된 값으로 문자열 변환

  23. 23

    string. Linq 쿼리를 결합하여 배열에서 두 개의 문자열을 병합하고 단일 쉼표로 구분 된 문자열로 출력

  24. 24

    문자열의 단어 당 문자 수를 계산하여 쉼표로 구분 된 값을 반환하는 방법이 있습니까?

  25. 25

    SQL Server에서 테이블의 정수 행을 쉼표로 구분 된 문자열로 변환하는 방법

  26. 26

    배열을 쉼표로 구분 된 문자열로 변환

  27. 27

    쉼표로 구분 된 문자열을 배열로 변환

  28. 28

    배열을 쉼표로 구분 된 문자열로 변환

  29. 29

    json 객체에서 쉼표로 구분 된 문자열을 배열로 변환

뜨겁다태그

보관