2017-08-28 130 views
0

我創建表,我插入了一些值。顯示錯誤的訂單

create table deposit1_groupc_tja05 
(
    Account_id number(25), 
    Account_type varchar(25), 
    Balance number(9,2) not null, 
    Transaction_amount number(9,2) not null, 
    Transaction_Date varchar(50), 
    Transaction_type varchar(25) 
) 

現在我需要通過Transaction_Date訂購呢? 我該如何改變這種情況?

+0

'ORDER BY' ???? ???? – Wanderer

+2

'SELECT * FROM deposit1_groupc_tja05 ORDER BY Transaction_Date' –

+1

RDBMS中的行表示無序集合。如果您想要訂購,則在查詢數據集時必須包含一個訂單。順便說一下,以你的方式命名的表格往往表現出設計不佳的症狀 – Strawberry

回答

1

在MySQL的默認存儲引擎,InnoDB的,表始終是按主鍵(這是聚簇索引)排序存儲。

您不在顯示的示例中聲明主鍵,因此InnoDB將按不可見的主鍵進行排序,因此存儲順序將成爲插入行的順序。

您可以使用ALTER TABLE聲明主鍵。這將通過主鍵對存儲進行重新排序。如果使用Transaction_Date,一個varchar,它將按字母順序排列,而不是按日期。如果您希望按日期排序,您應該使用DATE數據類型。

如果您希望給定的查詢結果集由除主鍵之外的另一列排序,則只需使用ORDER BY子句。您可以獲得與表格的存儲順序不同的結果集。

如果在查詢中沒有使用ORDER BY子句,則結果集通常(以及按照SQL標準)沒有保證順序,並且取決於實現。在InnoDB的情況下,仍然不能保證它總能以這種方式工作,但實際上,在當前版本中,沒有ORDER BY的查詢以從索引讀取它們的順序返回行(這可能是聚簇索引/主鍵)。

+0

實現不是抽象。 OP沒有說他們想要訂購*存儲*。不保證沒有ORDER BY的查詢的結果集是任意順序的,無論存儲順序如何。 – philipxy

+0

@philipxy,的確,OP的問題是模糊的,我想我們不會從他們那裏得到任何澄清。 –

1

無法按照您所描述的方式排列表格。

如果你想以選擇數據,然後使用以下

SELECT * 
FROM deposit1_groupc_tga05 
ORDER BY Transaction_Date 

你也應該TRANSACTION_DATE創建表的日期時間

1

如果你不能改變TRANSACTION_DATE列於日期時間,那麼你需要轉換的日期查詢這樣的:

SELECT * FROM deposit1_groupc_tga05 
ORDER BY STR_TO_DATE(Transaction_Date, '%c/%e/%Y %H:%i') 

或者根據日期被插入的格式,你需要改變格式字符串。