2016-02-12 62 views
0

我有一個名爲「訪問報告」的表。報告中有一列名爲「花費的小時數」,我想對其進行更改。SQL消除文本並保留數字,以小時爲單位捕獲數字

由於從其他來源導入的數據,「花費小時數」的一些記錄記錄爲例如「1小時」,「2分鐘」,「3天」。我想消除文本並保留號碼,以小時爲單位捕獲號碼。我該怎麼做,因爲有三個不同的單位?

這是我的代碼來標識包含「小時」,「分」,「天」,甚至像「小時」,「分」的記錄,「D」等

SELECT * 
FROM [VISIT REPORT] 
WHERE ((([VISIT REPORT].[Hours Spent]) Like '*h*' Or ([VISIT REPORT].[Hours Spent]) Like '*m*' Or ([VISIT REPORT].[Hours Spent]) Like '*d*')); 

我卡在這裏。我嘗試添加這個代碼,我相信這是錯誤的,因爲它不記錄三個不同的單位,幾小時,幾分鐘和幾天。

UPDATE VISIT REPORT SET [Hours Spent] = Val([Hours Spent]) 

現在我分開的問題分爲三個查詢,並開始了與一個查詢首先修復了小時的字段。 - 有用!

首先創建一個模塊,

Function RemoveAlphas(ByVal AlphaNum As Variant) 

    Dim Clean As String 
    Dim Pos, A_Char$ 

    Pos = 1 
    If IsNull(AlphaNum) Then Exit Function 

    For Pos = 1 To Len(AlphaNum) 
     A_Char$ = Mid(AlphaNum, Pos, 1) 
     If A_Char$ >= "0" And A_Char$ <= "9" Then 
     Clean$ = Clean$ + A_Char$ 
     End If 
    Next Pos 

    RemoveAlphas = Clean$ 

End Function 

然後插入該SQL,

UPDATE [VISIT REPORT] SET [VISIT REPORT].[Hours Spent] = "RemoveAlphas[Hours Spent]" 
WHERE ((([VISIT REPORT].[Hours Spent]) Like '*h*')); 

仍在試圖找出如何解決分鐘,天等領域。

+0

爲什麼不使用單獨的查詢,一個用於「小時」,一個用於「分鐘」,一個用於「日」? – Pang

+0

嗨龐。我可以爲包含「小時」,「分鐘」和「日」的識別做到這一點。但是,我不知道如何進行轉換和刪除文本。你有什麼主意嗎?謝謝Pang! – APPLEICECREAM

+0

我正在使用Microsoft Access 2013. – APPLEICECREAM

回答

2

Val([Hours Spent])會給你最初的數字。然後,您可以使用Switch表達式來確定乘法因子,以小時爲單位表示初始數字。

UPDATE [VISIT REPORT] 
SET [Hours Spent] = 
    CStr 
     (
      Val([Hours Spent]) 
      * 
      Switch 
       (
        [Hours Spent] Like '*day*', 24, 
        [Hours Spent] Like '*hour*', 1, 
        [Hours Spent] Like '*min*', (1/60) 
       ) 
     ) 
WHERE [Hours Spent] Like '*[dhm]*'; 

這裏有一個表,該表顯示小時的採樣值,並且其計算的等價物:

Hours Spent replacement text (hours) 
----------- ------------------------ 
1 hour  1 
2 minutes 3.33333333333333E-02 
3 days  72 

雖然這給你,你要求什麼,我對此心存顧慮,因爲存儲號碼爲文本很少是最好的選擇。每當你想用這些文本值作爲數字時,你就必須相應地施放它們。在這種情況下,您的查詢將無法利用[Hours Spent]上的索引,這意味着性能較差。我寧願將計算的小時數存儲在數據類型爲數字的單獨字段(單或雙)中。

+1

嗨HansUp!是的,這給了我想要的東西。謝謝!當然,記下你的評論!我仍處於數據庫導入數據的初始階段。我可能還會在不久的將來進行更改;) – APPLEICECREAM

+0

@HansUp:這很整齊。 – Gustav

相關問題