我注意到一些奇怪的東西,我不太確定該怎麼做。下面的結果集基本上是我的應用程序寫入其日誌消息的表上的SQL Select語句的輸出。我已經編輯了諸如網站和任務細節之類的敏感資料,併爲您提供了字段數據類型而不是字段名,除了內置於Firebird表中的RDB$DB_KEY
。 我希望您關注的是我列出的排列順序,儘管使用了在我的SQL中按照RDB $ DB_KEY排序。現在
Timestamp Field Varchar Field RDB$DB_KEY
======================== ====================== =================
19.12.2013, 10:40:40.000 Site_BC DB_2 connected 00000083:00000100
19.12.2013, 10:40:40.000 Site_BC DB_1 connected 00000083:000000fc
19.12.2013, 10:40:40.000 DB_1 tasks completed 00000083:000000fd
19.12.2013, 10:40:40.000 Site_A DB_2 connected 00000083:000000fe
,我可以發誓0
進來的ASCII表1
過,所以看起來行(假定排序中由RDB $ DB_KEY字段中的值升序)的順序沒有對我來說。
我做了一些基礎研究,顯然這個RDB $ DB_KEY字段是一個字節數組(雖然我不確定)。我試着把它作爲一個varchar和一個字符,但它似乎火鳥Cast
不支持從這個數據類型的轉換。
任何人都可以幫助我得到這些行正確排序嗎?我知道我可以添加另一列整數數據類型,然後按此排序,但我想我會問,以防萬一有人知道如何通過名爲RDB $ DB_KEY的混合祝福進行排序。
我正在使用Firebird 2.5版。
關於備份和恢復的觀點讓我相信不要使用它。否則,由於它不遵守Order By子句的規則(如果它不能被排序,那麼在實現中存在一個錯誤),否則我會將這個big-endian的東西稱爲實現中的一個錯誤。 [1]。謝謝。 – Sam
@Sam它不是一個錯誤:你可以通過'RDB $ DB_KEY'命令;它的(一致的)排序不符合你的期望是完全不同的。 –
我可以「排序」但它不按升序排序,因此它不起作用,因此它是一個錯誤。如果ASCII表是一夜之間改變和突然的字母「C」開頭並不意味着C中的字母「A」現在應該在一個排序結果集先於。單個字段值的編碼/解碼的內部並沒有改變什麼「升序排序」意味着對用戶的意義,因此在ORDER BY實現被打破。它不符合規範,或者在事實上重新定義了排序的時候,它被錯誤地提供了排序功能。 – Sam