Php SQL WHERE子句:按字符串的日期排序

Php SQL WHERE子句:按字符串的日期排序,php,mysql,sql,string,date,Php,Mysql,Sql,String,Date,我的数据库表中有一列保存格式为(mmm-yy)Ex:Aug-13的日期。我正在尝试选择6月12日之后的所有日期。问题是列是一个字符串,所以当我说WHERE column>'Jun-12'时,它给我的值按字母顺序大于Jun-12,例如May-12,这不是我想要的。有什么想法吗?在这种情况下,您应该能够转换为日期,然后根据需要进行筛选,下面的代码应该为您提供指导 SELECT * FROM Table WHERE CAST('01-' + column AS DATETIME) > '01-J

我的数据库表中有一列保存格式为(mmm-yy)Ex:Aug-13的日期。我正在尝试选择6月12日之后的所有日期。问题是列是一个字符串,所以当我说WHERE column>'Jun-12'时,它给我的值按字母顺序大于Jun-12,例如May-12,这不是我想要的。有什么想法吗?

在这种情况下,您应该能够转换为日期,然后根据需要进行筛选,下面的代码应该为您提供指导

SELECT *
FROM Table
WHERE CAST('01-' + column AS DATETIME) > '01-JUN-12'

将日期存储为日期,而不是字符串。这是推荐的方法,我建议您相应地修改代码

在这种情况下,您可以使用函数动态比较日期:

SELECT * FROM table_name WHERE column > STR_TO_DATE('Jun-12','%m-%y');

希望这有帮助

停止使用字符串保存日期,并使用适当的日期格式字段,当您将其顶部存储日期显示为字符串时,您可以将该字段格式化为所需的任何字符串。如果该日期存储为时间戳,则可以通过WHERE列(如“06-12%”)查询日期,然后在将该列的内容输出到我不能对这个问题吹毛求疵,不幸的是,有些情况下你会继承这样的数据库。至于如何修复此问题,请尝试在您的选择中对日期字段进行强制转换,并按如下方式进行比较:where date>'06/01/2013'理想情况下,日期应存储为日期,不幸的是,如果您继承了一个日期已设置为这样的数据库,您只能做这么多,更改格式会破坏所有其他内容。@user2366842:因此提出了
STR_TO_DATE
建议。谢谢大家的帮助,但上述解决方案对我不起作用。我也试过:WHERE STR_TO_DATE(PA_PERIOD_NAME,“%M-%Y”)>“Jun-12”,但也没用。我知道STR_TO_DATE函数是有效的,因为我有按STR_TO_DATE(PA_PERIOD_NAME,'%M-%Y')排序的ASC,它工作得很好。@AshvicGodinho:这是区分大小写的<代码>%M与
%M
不同。很抱歉,仍然无法工作。我的ORDER BY条款有%M,但可以正常工作。当然可以。选择*、总和(成本预算)总预算、总和(截至日期的负担成本)、总和(截至日期的负担成本)、总和(截至日期的负担成本)、每月费用(截至日期的实验室费用('01'+期间名称为日期时间)>'01-JUN-12'按期间名称分组按期间名称顺序按日期(期间名称,%M-%Y')asc从铸造地点的实验室选择什么*('01'+期间名称为日期时间)>'01-JUN-12'了解你吗?下面的内容了解你什么?从实验室中选择*按“01”按“01”按“01”按“01”按“01”按“01”按“01”按“01”按“01”按“01”按“01”按“01”按“日期时间”按“01”按“01”按“01”按“日期”按“名称”按“01”按“01”按“01”按“期间”按“名称”按“日期时间”按顺序排列),因为它们都不返回任何内容。mysqli_num_rows不给我任何信息。啊,试试大于或等于(>=),如果你只有6月12日的数据,这可以解释问题。在这之外,试着运行Select From并检查获取的数据,然后一次添加一个元素,然后按顺序添加where