복붙노트

[SQL] 쿼리 문자열에서 숫자 만 얻을 수 있습니다

SQL

쿼리 문자열에서 숫자 만 얻을 수 있습니다

이 같은 데이터를 가지고 :

string 1: 003Preliminary Examination Plan   
string 2: Coordination005  
string 3: Balance1000sheet

내가 기대 출력은

string 1: 003
string 2: 005
string 3: 1000

그리고 SQL에서 구현하고자합니다.

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    12.계정에 다른 답변을 촬영, 나는 내 자신의 함께했다 : 이 시도 :

    계정에 다른 답변을 촬영, 나는 내 자신의 함께했다 : 이 시도 :

    SUBSTRING('your-string-here', PATINDEX('%[0-9]%', 'your-string-here'), LEN('your-string-here'))
    

    주의 : abc123vfg34 수익률 123 : 만 문자열, 전에서 첫 번째 INT 작동합니다.

  13. ==============================

    13.당신이 포스트 그레스를 사용하고 같은 데이터가있는 경우 '2000 - 일부 샘플 텍스트를'다음 시나리오에서, 당신은 쓰기 정규식에 아무런 구분이 필요하지, 그렇지 않은 경우, 하위 문자열 및 위치 조합을 시도 :

    당신이 포스트 그레스를 사용하고 같은 데이터가있는 경우 '2000 - 일부 샘플 텍스트를'다음 시나리오에서, 당신은 쓰기 정규식에 아무런 구분이 필요하지, 그렇지 않은 경우, 하위 문자열 및 위치 조합을 시도 :

    SUBSTRING(Column_name from 0 for POSITION('-' in column_name) - 1) as 
    number_column_name
    
  14. from https://stackoverflow.com/questions/16667251/query-to-get-only-numbers-from-a-string by cc-by-sa and MIT license