[SQL] 쿼리 문자열에서 숫자 만 얻을 수 있습니다
SQL쿼리 문자열에서 숫자 만 얻을 수 있습니다
이 같은 데이터를 가지고 :
string 1: 003Preliminary Examination Plan
string 2: Coordination005
string 3: Balance1000sheet
내가 기대 출력은
string 1: 003
string 2: 005
string 3: 1000
그리고 SQL에서 구현하고자합니다.
해결법
-
==============================
1.먼저이 UDF를 작성
먼저이 UDF를 작성
CREATE FUNCTION dbo.udf_GetNumeric ( @strAlphaNumeric VARCHAR(256) ) RETURNS VARCHAR(256) AS BEGIN DECLARE @intAlpha INT SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric) BEGIN WHILE @intAlpha > 0 BEGIN SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' ) SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric ) END END RETURN ISNULL(@strAlphaNumeric,0) END GO
이제 함수를 사용
SELECT dbo.udf_GetNumeric(column_name) from table_name
SQL 뿐인
나는이 문제가 해결되기를 바랍니다.
참고
-
==============================
2.이걸로 해봐 -
이걸로 해봐 -
질문:
DECLARE @temp TABLE ( string NVARCHAR(50) ) INSERT INTO @temp (string) VALUES ('003Preliminary Examination Plan'), ('Coordination005'), ('Balance1000sheet') SELECT LEFT(subsrt, PATINDEX('%[^0-9]%', subsrt + 't') - 1) FROM ( SELECT subsrt = SUBSTRING(string, pos, LEN(string)) FROM ( SELECT string, pos = PATINDEX('%[0-9]%', string) FROM @temp ) d ) t
산출:
---------- 003 005 1000
-
==============================
3.질문:
질문:
DECLARE @temp TABLE ( string NVARCHAR(50) ) INSERT INTO @temp (string) VALUES ('003Preliminary Examination Plan'), ('Coordination005'), ('Balance1000sheet') SELECT SUBSTRING(string, PATINDEX('%[0-9]%', string), PATINDEX('%[0-9][^0-9]%', string + 't') - PATINDEX('%[0-9]%', string) + 1) AS Number FROM @temp
-
==============================
4.시도하십시오 :
시도하십시오 :
declare @var nvarchar(max)='Balance1000sheet' SELECT LEFT(Val,PATINDEX('%[^0-9]%', Val+'a')-1) from( SELECT SUBSTRING(@var, PATINDEX('%[0-9]%', @var), LEN(@var)) Val )x
-
==============================
5.이전 쿼리 나는이 결과를 얻을 :
이전 쿼리 나는이 결과를 얻을 :
'AAAA1234BBBB3333'>>>> 출력 : 1234
'! -ca + 0 \ aº1234'>>>> 출력 : 0
반환 모든 숫자 문자 아래의 코드 :
1 출력 : 12343333
2 출력 : 01234
declare @StringAlphaNum varchar(255) declare @Character varchar declare @SizeStringAlfaNumerica int declare @CountCharacter int set @StringAlphaNum = 'AAAA1234BBBB3333' set @SizeStringAlfaNumerica = len(@StringAlphaNum) set @CountCharacter = 1 while isnumeric(@StringAlphaNum) = 0 begin while @CountCharacter < @SizeStringAlfaNumerica begin if substring(@StringAlphaNum,@CountCharacter,1) not like '[0-9]%' begin set @Character = substring(@StringAlphaNum,@CountCharacter,1) set @StringAlphaNum = replace(@StringAlphaNum, @Character, '') end set @CountCharacter = @CountCharacter + 1 end set @CountCharacter = 0 end select @StringAlphaNum
-
==============================
6.
declare @puvodni nvarchar(20) set @puvodni = N'abc1d8e8ttr987avc' WHILE PATINDEX('%[^0-9]%', @puvodni) > 0 SET @puvodni = REPLACE(@puvodni, SUBSTRING(@puvodni, PATINDEX('%[^0-9]%', @puvodni), 1), '' ) SELECT @puvodni
-
==============================
7.나는 함수를 만들 수있는 권한이 있지만 같은 텍스트를 가지고하지 않았다
나는 함수를 만들 수있는 권한이 있지만 같은 텍스트를 가지고하지 않았다
["blahblah012345679"]
그리고 중간에서 숫자를 추출하는 데 필요한
이 숫자는 문자열의 시작과 끝에서 함께하지 그룹화되어 가정합니다.
select substring(column_name,patindex('%[0-9]%', column_name),patindex('%[0-9][^0-9]%', column_name)-patindex('%[0-9]%', column_name)+1) from table name
-
==============================
8.@Epsicron의 대답에 그냥 약간의 수정
@Epsicron의 대답에 그냥 약간의 수정
SELECT SUBSTRING(string, PATINDEX('%[0-9]%', string), PATINDEX('%[0-9][^0-9]%', string + 't') - PATINDEX('%[0-9]%', string) + 1) AS Number FROM (values ('003Preliminary Examination Plan'), ('Coordination005'), ('Balance1000sheet')) as a(string)
임시 변수에 대한 필요가 없습니다
-
==============================
9.이 구글 검색에서의 첫 옛 스레드이지만, 내가 전에 온 것보다 다른 답변을 내놓았다. 이것은 당신이 기준이 될 수 있다는 어떤 문자열 내에서 유지해야하는지에 대한 기준을 통과 할 수 있습니다. 당신은 당신이 원하는 경우 또 다시 호출하는 함수에 넣어 수 있습니다.
이 구글 검색에서의 첫 옛 스레드이지만, 내가 전에 온 것보다 다른 답변을 내놓았다. 이것은 당신이 기준이 될 수 있다는 어떤 문자열 내에서 유지해야하는지에 대한 기준을 통과 할 수 있습니다. 당신은 당신이 원하는 경우 또 다시 호출하는 함수에 넣어 수 있습니다.
declare @String VARCHAR(MAX) = '-123. a 456-78(90)' declare @MatchExpression VARCHAR(255) = '%[0-9]%' declare @return varchar(max) WHILE PatIndex(@MatchExpression, @String) > 0 begin set @return = CONCAT(@return, SUBSTRING(@string,patindex(@matchexpression, @string),1)) SET @String = Stuff(@String, PatIndex(@MatchExpression, @String), 1, '') end select (@return)
-
==============================
10.이 UDF는 문자열의 모든 종류의 작동합니다 :
이 UDF는 문자열의 모든 종류의 작동합니다 :
CREATE FUNCTION udf_getNumbersFromString (@string varchar(max)) RETURNS varchar(max) AS BEGIN WHILE @String like '%[^0-9]%' SET @String = REPLACE(@String, SUBSTRING(@String, PATINDEX('%[^0-9]%', @String), 1), '') RETURN @String END
-
==============================
11.오라클
오라클
당신은 당신이 이것을 사용하여 원하는 것을 얻을 수 있습니다 :
SUBSTR('ABCD1234EFGH',REGEXP_INSTR ('ABCD1234EFGH', '[[:digit:]]'),REGEXP_COUNT ('ABCD1234EFGH', '[[:digit:]]'))
샘플 검색어 :
SELECT SUBSTR('003Preliminary Examination Plan ',REGEXP_INSTR ('003Preliminary Examination Plan ', '[[:digit:]]'),REGEXP_COUNT ('003Preliminary Examination Plan ', '[[:digit:]]')) SAMPLE1, SUBSTR('Coordination005',REGEXP_INSTR ('Coordination005', '[[:digit:]]'),REGEXP_COUNT ('Coordination005', '[[:digit:]]')) SAMPLE2, SUBSTR('Balance1000sheet',REGEXP_INSTR ('Balance1000sheet', '[[:digit:]]'),REGEXP_COUNT ('Balance1000sheet', '[[:digit:]]')) SAMPLE3 FROM DUAL
-
==============================
12.계정에 다른 답변을 촬영, 나는 내 자신의 함께했다 : 이 시도 :
계정에 다른 답변을 촬영, 나는 내 자신의 함께했다 : 이 시도 :
SUBSTRING('your-string-here', PATINDEX('%[0-9]%', 'your-string-here'), LEN('your-string-here'))
주의 : abc123vfg34 수익률 123 : 만 문자열, 전에서 첫 번째 INT 작동합니다.
-
==============================
13.당신이 포스트 그레스를 사용하고 같은 데이터가있는 경우 '2000 - 일부 샘플 텍스트를'다음 시나리오에서, 당신은 쓰기 정규식에 아무런 구분이 필요하지, 그렇지 않은 경우, 하위 문자열 및 위치 조합을 시도 :
당신이 포스트 그레스를 사용하고 같은 데이터가있는 경우 '2000 - 일부 샘플 텍스트를'다음 시나리오에서, 당신은 쓰기 정규식에 아무런 구분이 필요하지, 그렇지 않은 경우, 하위 문자열 및 위치 조합을 시도 :
SUBSTRING(Column_name from 0 for POSITION('-' in column_name) - 1) as number_column_name
from https://stackoverflow.com/questions/16667251/query-to-get-only-numbers-from-a-string by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가장 좋은 방법은 임의의 행을 선택하는 PostgreSQL을 (0) | 2020.03.11 |
---|---|
[SQL] PHP는 mysqli 준비된 문장 LIKE (0) | 2020.03.11 |
[SQL] 열 이름 피벗 해제 (0) | 2020.03.11 |
[SQL] LINQ 도구에 SQL이 [마감] (0) | 2020.03.11 |
[SQL] 일 / 월 / 년 BY MySQL의 쿼리 GROUP (0) | 2020.03.11 |