2014-01-29 2 views
1

MS Access DB의 한 테이블 내에서 작업하고 있습니다. 필드 A의 값이 유효한 형식 (이 경우 한두 개의 숫자와 문자가 뒤 따르는)을 따르는 지 확인하려면 iif 문을 사용하고 싶습니다. 만약 그렇다면, 나는 필드 A의 숫자 부분만을 취하고 싶다. (예를 들어, 필드 A에 대한 엔트리가 "15B"라면, 나는 "15"부분 만 고려할 것이다) 그것을 현재 비어있는 필드에 삽입하고 싶다. B를 만들었습니다.하나의 필드에서 다른 필드로 값의 일부를 삽입

필드 A의 숫자 부분 만 고려한 후 필드 B에 삽입하는 MS Access 쿼리를 작성하려면 어떻게해야합니까?

+0

어떤 코드를 사용해 보셨습니까? – Matt

답변

1

에서 ExtractNumber했다 있음을 알려드립니다 :

UPDATE tbl1 SET tbl1.ValB = 
    Switch([ValA] Like "#[a-z]",Left([valA],1), 
    [valA] Like "##[a-z]",Left([valA],2),True,NULL); 

또는 Val 함수를 사용하거나 가능한 한 문자열에서 변환하려고 시도합니다 숫자로 :

UPDATE tbl1 SET tbl1.ValB = 
iif(valA like "#[a-z]" or valA like "##[a-z]",val(ValA),NULL) 
+0

제공 한 첫 번째 진술은 매력처럼 작동했습니다. 전에 switch 문이나 Left/Right 함수를 사용하지 않았습니다. 도와 주셔서 감사합니다! – user3250548

1

당신은뿐만 아니라 id 필드가 필요합니다

Private Sub bntStart_Click() 
    On Error GoTo err_trap 

     Dim con As ADODB.Connection 
     Dim rsLocal, rsLocal_Upd As ADODB.Recordset 

     Dim sql_string As String 
     Dim counter, numeric_value As Integer 

     Set counter = 1 

     sql_string = "SELECT * FROM TblTest" 

     Set con = CurrentProject.Connection 
     Set rsLocal = con.Execute(sql_string) 

     If Not (rsLocal.BOF And rsLocal.EOF) Then 
      rsLocal.MoveFirst 
      While Not rsLocal.EOF 
       If Len(ExtractNumber(rsLocal.Fields("FieldA")) > 0) Then 
        numeric_value = ExtractNumber(rsLocal.Fields("FieldA")) 
        sql_string = "UPDATE TblTerms SET FieldB = " & numeric_value & " WHERE id = " & counter 
        Set con = CurrentProject.Connection 
        Set rsLocal_Upd = con.Execute(sql_string) 
       End If 
       rsLocal.MoveNext 
       counter = counter + 1 
      Wend 
     End If 

     Set con = Nothing 
     Exit Sub 

    err_trap: 
     MsgBox (Err.Description) 
     Set con = Nothing 

    End Sub 

    Function ExtractNumber(str As Srting) 
     Dim iCount As Integer, i As Integer 
     Dim sText As String 
     Dim lNum As String 


     'Written by OzGrid Business Applications 
     '[url]www.ozgrid.com[/url] 

     'Extracts a number from a cell containing text And numbers. 

     sText = str 

     For iCount = Len(sText) To 1 Step -1 
      If IsNumeric(Mid(sText, iCount, 1)) Then 
       i = i + 1 
       lNum = Mid(sText, iCount, 1) & lNum 
      End If 

      If i = 1 Then lNum = CInt(Mid(lNum, 1, 1)) 
     Next iCount 

     ExtractNumber = CLng(lNum) 
    End Function 

난 당신이 이런 식으로, 당신은 like으로 업데이트 쿼리를 구축 할 수 있습니다 설명 패턴은 여기 http://www.ozgrid.com/forum/showthread.php?t=18185

1

질문의 검증의 경우, 당신은 Like 패턴 매칭을 사용할 수 있습니다. 직접 실행 창에서 예제입니다. 테스트가 제대로 의도를 표현하는 경우

? "15A" Like "#[A-Z]" Or "15A" Like "##[A-Z]" 
True 

? "4B" Like "#[A-Z]" Or "4B" Like "##[A-Z]" 
True 

? "123A" Like "##[A-Z]" Or "123A" Like "##[A-Z]" 
False 

? "15AB" Like "#[A-Z]" Or "15AB" Like "##[A-Z]" 
False 

? "15!" Like "#[A-Z]" Or "15!" Like "##[A-Z]" 
False 

, 당신은 Field A검증 규칙로 사용할 수 있습니다 : Field B에 관해서는

Like "#[A-Z]" Or Like "##[A-Z]" 

, 당신이 만들 수있는의 필드 표현 질문. 어디서든 조회

SELECT 
    [Field A], 
    Val([Field A]) AS [Field B] 
FROM YourTable; 

사용 당신은 [Field B]을 볼 필요가있다. 이 방법을 사용하면 테이블에 [Field B]이없는 경우 [Field A] 값이 변경 될 때마다 [Field B] 저장된 값을 업데이트 할 필요가 없습니다.

관련 문제