我知道SO上已经存在一些问题,但我找不到正确的答案。
我正在尝试按照这样的形式订购日期:01-01-1999。我的查询如下:
SELECT id, header, date FROM table ORDER BY date DESC
我得到4行似乎没问题,(它们是相同的)但是后来我得到了一些奇怪的结果。
字段是VARCHAR(); - 将01-01-1999格式存储在哪个字段?
奇怪的结果是我得到了4x30-08-2012 ..然后是很多旧日期,但突然之间有3个13-09-2012的记录。
我的问题是:为什么不对它们进行排序:2x13-09-2012然后4x30-08-2012然后再继续。
更新
问题解决了。但仍然:我将使用哪个数据字段来代替我的日期而不是VARCHAR?
答案 0 :(得分:5)
juergen给出了答案,该答案基本上涉及每次解析的日期。另外两种选择表明了自己:
更改数据库架构,使列已经是日期类型(例如DATE
)而不是字符串。当您使数据库列准确表示要存储在其中的数据类型时,生活往往要好得多。
如果确实需要将数据存储在字符串列中,请考虑将格式更改为yyyy-MM-dd。这是一种自然可排序的格式,因为“字母”排序与日期的“语义”排序兼容。
第一个选择肯定是首选的IMO。这超出了订购范围,直至:
答案 1 :(得分:4)
答案 2 :(得分:0)
在字符串中存储日期的最佳方法是“YYYY-MM-DD”。 MySQL具有日期的原生格式 - DATETIME。