복붙노트

[SQL] SELECT에서 숫자가 아닌 문자를 빼내야

SQL

SELECT에서 숫자가 아닌 문자를 빼내야

석사 액세스 2007 프로젝트 보고서에서, 나는 다음 (편집 됨) 쿼리를 가지고 :

SELECT SomeCol FROM SomeTable

문제는 SomeCol 분명히 몇 가지 눈에 보이지 않는 문자가 포함되어있다. 예를 들어, 나는 하나 개의 결과가 123456로 반환하지만? 123456 메모장에 ++, 그 쇼를 결과를 복사 할 때 SELECT LEN (SomeCol)이 7 반환을 참조하십시오.

칼럼 TEXT로 설정된다. 나는이 데이터 유형을 통제 할 수없는, 그래서 그것을 변경할 수 없습니다.

어떻게 숫자가 아닌 무엇을 제거하기 위해 내 SELECT 쿼리를 수정할 수 있습니다. 나는 다른 방법으로는, CAST 또는 CONVERT 기능이있다 ... 정규식이 길을 가야하는 것입니다 의심?

해결법

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

    1.이에 대해 정규 표현식을 사용하여 언급했다. 액세스 'DB 엔진이 직접 정규 표현식을 지원하지 않는다는 사실이다. 그러나, 당신이 당신의 쿼리에서 VBA 사용자 정의 함수를 사용하고자하는 것 ... 그리고 UDF는 정규 표현식의 방법을 사용할 수 있습니다. 이러한 접근이 쉽고, 간단하고 빠르게 입력 문자열의 각 문자를 통해 반복하는 것보다 수행에만 새 출력 문자열에 유지하려면 해당 문자를 저장한다.

    이에 대해 정규 표현식을 사용하여 언급했다. 액세스 'DB 엔진이 직접 정규 표현식을 지원하지 않는다는 사실이다. 그러나, 당신이 당신의 쿼리에서 VBA 사용자 정의 함수를 사용하고자하는 것 ... 그리고 UDF는 정규 표현식의 방법을 사용할 수 있습니다. 이러한 접근이 쉽고, 간단하고 빠르게 입력 문자열의 각 문자를 통해 반복하는 것보다 수행에만 새 출력 문자열에 유지하려면 해당 문자를 저장한다.

    Public Function OnlyDigits(ByVal pInput As String) As String
        Static objRegExp As Object
    
        If objRegExp Is Nothing Then
            Set objRegExp = CreateObject("VBScript.RegExp")
            With objRegExp
                .Global = True
                .Pattern = "[^\d]"
            End With
        End If
        OnlyDigits = objRegExp.Replace(pInput, vbNullString)
    End Function
    

    여기에 보이지 않는 문자를 프록시로 "X"문자를 직접 실행 창에서 그 함수의 예입니다. (모든 문자는 문자 클래스가 폐기 될 것이다 "숫자"에 포함되지 않습니다.)

    ? OnlyDigits("x1x23x")
    123
    

    그게 당신이 원하는 출력의 경우, 당신의 쿼리 기능을 사용합니다.

    SELECT OnlyDigits(SomeCol) FROM SomeTable;
    
  2. ==============================

    2.액세스에는 정규식은 적어도하지 SQL에 없다. 당신은 VBA 벤처 경우, 당신은뿐만 아니라 SQL 문에 사용자 정의 StripNonNumeric VBA 기능을 사용할 수 있습니다.

    액세스에는 정규식은 적어도하지 SQL에 없다. 당신은 VBA 벤처 경우, 당신은뿐만 아니라 SQL 문에 사용자 정의 StripNonNumeric VBA 기능을 사용할 수 있습니다.

    예를 들면 SomeTable에서 SomeCol로 SELECT StripNonNumeric (SomeCol)

    Function StripNonNumeric(str)
          keep = "0123456789"
          outstr = ""
          For i = 1 to len(str)
              strChar = mid(str,i,1)
              If instr(keep,strChar) Then
                  outstr = outstr & strChar
              End If
          Next
          StripNonNumeric = outstr
      End Function
    
  3. ==============================

    3.당신은 당신의 이전 질문과이 질문을 결합, 모든 쿼리에서 그것을 할 수 있습니다, 당신은 얻을 :

    당신은 당신의 이전 질문과이 질문을 결합, 모든 쿼리에서 그것을 할 수 있습니다, 당신은 얻을 :

    SELECT IIf(IsNumeric([atext]),
               IIf(Len([atext])<4,Format([atext],"000"),
                   Replace(Format(Val([atext]),"#,###"),",",".")),
               IIf(Len(Mid([atext],2))<4,Format(Mid([atext],2),"000"),
                   Replace(Format(Val(Mid([atext],2)),"#,###"),",","."))) AS FmtNumber
    FROM Table AS t;
    
  4. ==============================

    4.

    Public Function fExtractNumeric(strInput) As String
    ' Returns the numeric characters within a string in
    ' sequence in which they are found within the string
    Dim strResult As String, strCh As String
    Dim intI As Integer
    If Not IsNull(strInput) Then
        For intI = 1 To Len(strInput)
            strCh = Mid(strInput, intI, 1)
            Select Case strCh
                Case "0" To "9"
                    strResult = strResult & strCh
                Case Else
            End Select
        Next intI
    End If
    fExtractNumeric = strResult
    

    최종 기능

  5. from https://stackoverflow.com/questions/12563701/strip-out-non-numeric-characters-in-select by cc-by-sa and MIT license