【问题标题】:SQL Sorting Inquiry [duplicate]SQL排序查询[重复]
【发布时间】:2018-12-04 09:52:32
【问题描述】:

我有一个 sql 表,其中有一列名为 reference_number

reference_number 具有格式为 x-MMYY-xxxx 的值。 (MM 表示月份,YY 表示年份。-xxxx 是自动递增的。)

我的问题是,如果我在reference_number 中输入以下值

2012 年 3 月 (x-0312-xxxx)

2012 年 4 月 (x-0412-xxxx)

2013 年 1 月 (x-0113-xxxx)

ORDER BY reference_number 会将它们排序为

x-0113-xxxx

x-0312-xxxx

x-0412-xxxx

有没有办法按正确的日期顺序对reference_number 进行排序。

【问题讨论】:

  • x 字符中隐藏着什么?
  • 它正在正确订购它们。从小到大。 MySQL 不知道您打算将 0312 设为 monthYear。另一个建议是将日期保留在另一列中(除了在您的订单参考中,而不是代替),或者 yearDay 可能有效(如果我的大脑工作正常)。
  • 您可能需要将年份部分和月份部分作为两个单独的数据进行排序。
  • @JonStirling 你是对的。 sql 以常规方式对其进行排序,忽略 x-MMYY-xxxx 的格式。我需要一种方法来教 sql 它应该按正确的日期顺序排序。

标签: php html mysql


【解决方案1】:

我假设您的reference_number 列的数据类型是字符字段?

按字符字段排序将“尽最大努力”来理解数据并将其解释为它想要排序的格式,在这种情况下,您会注意到它将参考的日期部分解释为数值,并且因此,将以这种方式对它们进行排序。

字母数字数据将按此排序。

如果您需要按日期排序的数据,您可以采用多种解决方案,但最终您将需要一个 DateTime 值作为排序依据。

添加一个reference_date 列并将日期值添加到此列,通过直接插入或数据库触发器等。

恕我直言,您必须具有日期值才能按日期排序,但是您决定实现这一点。

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 2020-01-23
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    相关资源
    最近更新 更多