[SQL] SQL에서 처음 2 특수 문자 사이의 문자를 가져옵니다
SQLSQL에서 처음 2 특수 문자 사이의 문자를 가져옵니다
나는 SQL에서 (그냥 참고 : SQL 스튜디오는 IDE입니다) 데이터가 같은 :
data
a_10_b_c
a_1_b_c
내가 처음 두 문자 사이의 데이터를 얻으려면 _ :
Output
10
1
해결법
-
==============================
1.이건 내 방법이 될 것입니다 :
이건 내 방법이 될 것입니다 :
SELECT CAST('<x>' + REPLACE(data,'_','</x><x>') + '</x>' AS XML).value('/x[2]','int') FROM YourTable
먼저 당신은 XML이 변환 한 다음 두 번째 노드를 선택 ..
편집 :이 방법이 유용합니다 몇 가지 더 많은 예제 :
CROSS이 적용됩니다 : 당신은 한 번에 여러 개의 토큰을 얻기 위해이 방법을 사용할 수 있습니다
DECLARE @tbl TABLE(separated VARCHAR(100)); INSERT INTO @tbl VALUES('1_23:50_Look_this_is_a_test'),('2_12:00_that''s_one_more_test'),('3_13:30_great!_It_works!'); SELECT Converted.value('/x[1]','int') AS number ,Converted.value('/x[2]','time') AS time ,Converted.value('/x[3]','varchar(max)') AS text FROM @tbl CROSS APPLY(SELECT CAST('<x>' + REPLACE(separated,'_','</x><x>') + '</x>' AS XML) AS Converted) AS MySeparated --type-safe and easy: /* number time text 1 23:50 Look 2 12:00 that's 3 13:30 great! */ GO
CTE : 매개 변수로 사용
DECLARE @Parameter VARCHAR(100)='1_12:30_SomeValue'; WITH MyParameters AS ( SELECT CAST('<x>' + REPLACE(@Parameter,'_','</x><x>') + '</x>' AS XML).value('/x[1]','int') AS IntParam ,CAST('<x>' + REPLACE(@Parameter,'_','</x><x>') + '</x>' AS XML).value('/x[2]','time') AS TimeParam ,CAST('<x>' + REPLACE(@Parameter,'_','</x><x>') + '</x>' AS XML).value('/x[3]','varchar(max)') AS TextParam ) SELECT IntParam,TimeParam,TextParam FROM MyParameters /* IntParam TimeParam TextParam 1 12:30:00 SomeValue */ GO
분할 문자열 : 목록에 변환
DECLARE @MyIDs VARCHAR(100)='3,5,7'; SELECT A.B.value('.','int') TheIntValue FROM(SELECT CAST('<x>' + REPLACE(@MyIDs,',','</x><x>') + '</x>' AS XML) AS MyListAsXML) AS x CROSS APPLY MyListAsXML.nodes('/x') AS A(B) /* TheIntValue 3 5 7 */ GO
동적 IN 문
DECLARE @tbl TABLE(ID INT,Content VARCHAR(max)); INSERT INTO @tbl VALUES(1,'Value 1'),(2,'Value 2'),(3,'Value 3'),(4,'Value 4'),(5,'Value 5'),(6,'Value 6'),(7,'Value 7'); DECLARE @MyIDs VARCHAR(100)='3,5,7'; /* This won't work (due to the fact, that @MyIDs is not a list of INTs but a text SELECT * FROM @tbl WHERE ID IN(@MyIDs) */ WITH AsList AS ( SELECT A.B.value('.','int') TheIntValue FROM(SELECT CAST('<x>' + REPLACE(@MyIDs,',','</x><x>') + '</x>' AS XML) AS MyListAsXML) AS x CROSS APPLY MyListAsXML.nodes('/x') AS A(B) ) SELECT * FROM @tbl WHERE ID IN(SELECT TheIntValue FROM AsList) /* ID Content 3 Value 3 5 Value 5 7 Value 7 */
-
==============================
2.당신은 중첩 된 문자열 함수와 함께이 작업을 수행 할 수 있습니다. 종종이 적용 외부를 사용하여 간단하다 :
당신은 중첩 된 문자열 함수와 함께이 작업을 수행 할 수 있습니다. 종종이 적용 외부를 사용하여 간단하다 :
select t3.output from t outer apply (select stuff(t.col, 1, charindex('_', t.col), '') as col2 ) t2 outer apply (select left(t2.col2, charindex('_', t2.col2)) as output ) t3;
from https://stackoverflow.com/questions/33657835/get-the-character-between-first-2-special-character-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 동적 열 플러스 컬럼 이름 UNPIVOT (0) | 2020.05.16 |
---|---|
[SQL] XMLNS와 OPENXML : DT (0) | 2020.05.16 |
[SQL] 오라클에서 피벗 테이블을 사용하여 조언 (0) | 2020.05.16 |
[SQL] ExecuteNonQuery는이 반환 -1 쿼리 문자열에도 불구하고 SQL COUNT를 사용하는 경우 (0) | 2020.05.16 |
[SQL] 하나의 테이블 컬럼에 다중 비트 값을 저장 (0) | 2020.05.16 |