[SQL] SELECT에서 숫자가 아닌 문자를 빼내야
SQLSELECT에서 숫자가 아닌 문자를 빼내야
석사 액세스 2007 프로젝트 보고서에서, 나는 다음 (편집 됨) 쿼리를 가지고 :
SELECT SomeCol FROM SomeTable
문제는 SomeCol 분명히 몇 가지 눈에 보이지 않는 문자가 포함되어있다. 예를 들어, 나는 하나 개의 결과가 123456로 반환하지만? 123456 메모장에 ++, 그 쇼를 결과를 복사 할 때 SELECT LEN (SomeCol)이 7 반환을 참조하십시오.
칼럼 TEXT로 설정된다. 나는이 데이터 유형을 통제 할 수없는, 그래서 그것을 변경할 수 없습니다.
어떻게 숫자가 아닌 무엇을 제거하기 위해 내 SELECT 쿼리를 수정할 수 있습니다. 나는 다른 방법으로는, CAST 또는 CONVERT 기능이있다 ... 정규식이 길을 가야하는 것입니다 의심?
해결법
-
==============================
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.액세스에는 정규식은 적어도하지 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.당신은 당신의 이전 질문과이 질문을 결합, 모든 쿼리에서 그것을 할 수 있습니다, 당신은 얻을 :
당신은 당신의 이전 질문과이 질문을 결합, 모든 쿼리에서 그것을 할 수 있습니다, 당신은 얻을 :
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.
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
최종 기능
from https://stackoverflow.com/questions/12563701/strip-out-non-numeric-characters-in-select by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 MySQL의에서 계산 된 필드를 만드는 방법? (0) | 2020.07.14 |
---|---|
[SQL] 어떤 ANY의 부재에서 가장 저렴한 집계 함수입니다 () (0) | 2020.07.14 |
[SQL] 어떻게 TSQL을 사용하여 업데이트의 Blob에서 SQL 서버에 (0) | 2020.07.14 |
[SQL] 기둥 이름을 통해) (DataReader.GetString (0) | 2020.07.14 |
[SQL] SQL 제약 조건 : 날짜 A는 날짜 B 전입니다 - 어떻게? (0) | 2020.07.14 |