2010-03-02 33 views
1

在我使用的ms-access表中,我們有一個設置大小的文本字段。 在這個領域的結尾有一些額外的代碼,根據情況而有所不同。 我正在尋找一種方法來刪除這些代碼之一,但即使最後一部分被截斷字段的最大大小。MS-Access:替換「支架」

讓我們調用字段「field」和我想要移除「abc-longcode」的代碼。

如果我用字符串abc-longcode替換SQL函數,查詢只能在代碼完成時才起作用。

如果我也希望我的更新查詢(除了在我的領域結束時刪除這個特定的代碼)來處理不完整的代碼如何將轉換爲ms-SQL?

它必須刪除(或使用「」替換要準確)以下所有內容(當然例子,不是真正的代碼):

abc-longcode 
abc-longcod 
abc-longco 
abc-longc 
abc-long 
abc-lon 
abc-lo 
abc-l 

很顯然,我能做到這一點有幾個查詢。每一個代替預期的截斷代碼之一......但它聽起來並不理想。另外,當字段足夠大以獲取所有代碼時,有時可能會有額外的細節,最後我還想保留,所以我不能只是查找「abc -l」並刪除一切如下:\

此查詢(或查詢,如果我找不到更好的方法)將直接進入.mdb數據庫。

因此,雖然我可以想出幾種方法在ms-sql查詢之外執行此操作,但它並不能幫助我。

任何幫助? 謝謝。

回答

1

您可以編寫自定義的VBA替換方法來替換任何給定的情況{「abc-longcode」,...「abc -l」}。這與你的「幾個查詢」想法基本相同,除了它只是一個查詢。我的VBA是生疏,但這樣的:

public function ReplaceCodes(str as string) as string 
    dim returnString as string 

    returnString = str 
    returnString = replace(returnString,"abc-longcode","") 
    // ... etc... 

    ReplaceCodes = returnString 
end function 

我可能得到的參數順序錯了就更換:)

+0

這樣做,但我不認爲這是可以做到的。我喜歡這個答案,因爲它還允許我將其他代碼放在我將要查找的相同功能中。例如:def-longcode,def-longcod等等......感謝您的幫助! – 2010-03-02 18:09:00

+0

純粹的SQL替代方法是查詢中替換函數的一個長序列,它很難閱讀,難以維護和難看。訪問已經足夠醜陋:) – 2010-03-04 19:15:14

0

我會用自己的自定義功能,這個使用split函數獲取第一個這樣做部分字符串。然後,您可以在更新查詢中使用該值。

Public Function FirstPart(thetext As String) As String 
    Dim ret As String 
    Dim arrSplitText As Variant 

    arrSplitText = Split(thetext, "-") 
    ret = arrSplitText(0) 

    FirstPart = ret 
End Function 
0

你可以使用:

Left(FieldX,InStr(FieldX,"abc-")-1) 

編輯再評論

如果有空格或其他標準的分隔符:我希望有一個純粹的SQL的方式來

IIf(InStr(InStr(FieldX, "abc-"), FieldX, " ") = 0, Left(FieldX, InStr(FieldX, "abc-") - 1), Replace(FieldX, Mid(FieldX, InStr(FieldX, "abc-"), InStr(InStr(FieldX, "abc-"), FieldX, " ") - InStr(FieldX, "abc-")), "")) 
+0

我喜歡這個純粹的SQL性質的答案,但這個代碼的問題是,如果我的longcode是在字段中完成,並且在字段的末尾有一些額外的細節,這將不會保留額外的細節。換句話說,它會從我所尋找的東西中刪除所有的東西,而不是「我」正在尋找的東西。 – 2010-03-02 18:04:00

+0

我不認爲你已經很好地定義了這個問題,因爲我不知道你想把你的樣本數據轉化爲什麼。就我所知,您的示例數據並不包含要刪除的內容之後的數據,因此很難提供解決方案。 – 2010-03-02 22:21:39

+0

@大衛W芬頓呃? :) – Fionnuala 2010-03-02 23:07:42