2010-09-28 60 views
2

查詢:RIGHT函數,沒有返回什麼期望?

SELECT StartDate, EndDate, RIGHT(Sector, 1) 
FROM Table1 
ORDER BY Right(Sector, 1), StartDate 

通過看這個,查詢應當責令各部門的一切,隨後開始日期。此查詢安靜的工作一段時間,直到昨天它沒有正確訂購,出於某種原因,扇區2扇區1之前來到

的扇區中的數據類型爲int類型,不是空的。在扇區中插入TRIM函數後,似乎工作正常。

新查詢:

SELECT StartDate, EndDate, RIGHT(Sector, 1) 
FROM Table1 
ORDER BY Right(TRIM(Sector), 1), StartDate 

,我發現很奇怪的,因爲它假設只挑選出一個字符,那麼爲什麼會出現前導空格?

是否與轉換類型之前使用一個INT RIGHT功能的問題?或者是別的什麼?

感謝大家的幫助!

CNC中RIGHT函數返回值應該是1,2,3或4但訂貨時,2來之前1.

爲了澄清,列行業包含一個int值,我們可以判斷它的位置通過獲得最後一個數字(這就是爲什麼以前的編碼器一樣)

+0

你是什麼意思,「部門2來到部門1之前」? – 2010-09-28 12:06:45

+0

我以爲他的意思是它會返回 部門2 部門1 而不是 部門1 部門2 – Gage 2010-09-28 12:15:42

+0

你確定'Sector'的類型是'int'? – Andomar 2010-09-28 12:18:00

回答

3

MS Access 2003中有一個奇怪的小功能(我不能代表其他版本說話):

  1. 做一個簡單的查詢。按列A排序升序。保存查詢。
  2. 運行查詢。當你看到輸出,排序列A 使用工具欄選項降序(見下圖)。保存&關閉。
  3. 再次運行查詢。您的新排序將覆蓋您在查詢中保存的排序。

我想你或別人可能只是開了查詢出於好奇,按行業分降序排序,並在提示保存設計更改時,您選擇是(即使在技術上你沒有做任何)。我發現恢復原始排序的最簡單方法是編輯查詢並保存它。

alt text

+0

+1,知道這很有趣!儘管我創建並運行了兩個查詢,但沒有修改結果,並且出現了與所述相同的錯誤(TRIm =>排序正確,沒有TRIM =>沒有正確排序) – ChickSentMeHighE 2010-09-28 13:12:56

+0

我在更改列順序時注意到了這一點以及。 – JeffO 2010-09-28 14:18:14

+0

可能是最正確的答案,刪除查詢並再次創建兩個後,我無法複製該問題。感謝PowerUser! – ChickSentMeHighE 2010-09-28 15:32:56

1

似乎很明顯,你必須在行業領域的結束該裝飾被刪除空格。

+0

也許顯而易見的是一個強大的詞...可能可能嗎? – wcm 2010-09-28 13:37:56

+0

RIGHT(Sector,1)將返回一個空格。這是可能的,他錯過了。 – JeffO 2010-09-28 14:19:41

+0

OP表示扇區是整數。它如何在最後包含一個空白空間? – HansUp 2010-09-28 15:07:20

3

如果您需要對數字字段的子字符進行排序,則會導致數據存儲錯誤。

這就是說,在某些上下文中,VBA函數爲符號的字符串表示形式保留一個空格。這方面的一個荒謬的例子是:

?Len("12345") 
    5 

通知開頭的空間(其中 - 是,如果()由萊恩返回的數字可能是負的)。我認爲這是將一個數字強制爲一個字符串值的結果,但那不是,我不能複製這個問題。但這可能會成爲問題的根源,當然,削減領先空間會解決這個問題。

但是,這是每行的兩個函數調用,然後你按它排序,這意味着沒有使用索引,所以它會相對於可以使用索引的SORT BY慢。所以,我認爲你有一個模式錯誤,因爲你賦予字段中存儲的數據的子部分的含義。

+0

+1有趣的帖子,這聽起來真的接近我遇到的問題以及如何修剪它。 – ChickSentMeHighE 2010-09-29 05:26:38

相關問題