Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择两周前的查询_Mysql_Select_Date Arithmetic - Fatal编程技术网

Mysql 选择两周前的查询

Mysql 选择两周前的查询,mysql,select,date-arithmetic,Mysql,Select,Date Arithmetic,在我的数据库表中,我有一个日期字段(varchar字段以yy-mm-dd格式保存日期),现在我想选择两周前的记录。 我该怎么做呢?理想情况下,您应该使用日期类型来存储日期,但事实并非如此,您应该研究到日期的转换,然后进行比较 select * from yourtable where cast (yourdate as Date) BETWEEN Date_Add(CURDATE(), INTERVAL -21 Day) and Date_Add(CURDATE(), INTERVAL -14

在我的数据库表中,我有一个日期字段(varchar字段以yy-mm-dd格式保存日期),现在我想选择两周前的记录。
我该怎么做呢?

理想情况下,您应该使用日期类型来存储日期,但事实并非如此,您应该研究到日期的转换,然后进行比较

select * from yourtable where cast (yourdate as Date) BETWEEN Date_Add(CURDATE(), INTERVAL -21 Day) and Date_Add(CURDATE(), INTERVAL -14 Day)
注意,这是未经测试的,可能需要一些调整,但应该让您大致了解需要做什么


此外,如果可能的话,您应该真正考虑将varchar字段转换为日期字段……它们有日期类型来防止这种情况发生,尽管我知道更改字段类型并不总是可能的。

您只需使用
ADDDATE
即可在14天前获得。将字符串日期进行比较将起作用

SELECT *
FROM your_table
WHERE your_date >= ADDDATE(NOW(), -14) AND your_date < NOW()
选择*
从你的桌子上
其中您的_date>=ADDDATE(NOW(),-14)和您的_date
隐式日期算法在MySQL中相当灵活。您可以将日期作为字符串进行比较,而无需显式使用
CAST()
DATE()
,但您相信MySQL能够正确解释您的格式。幸运的是,在
yy-mm-dd
上就可以了

我建议在和间隔之间使用
,以便您的查询易于阅读;例如:

SELECT * FROM Holidays 
WHERE Date BETWEEN (NOW() - INTERVAL 14 DAY) AND NOW();
之间使用
的唯一诀窍是必须将下限放在第一位,将上限放在第二位;例如,如果在5和2之间写入
,则其计算结果始终为
FALSE
,因为没有任何值可以大于或等于5,同时也小于或等于2

,以及MySQL中的列表


请注意,表达式
NOW()-INTERVAL 14 DAY
周围的括号不是必需的,但我建议在此处使用它们纯粹是为了清楚起见。它使谓词子句在没有适当语法突出显示的情况下更容易阅读,但要花费两个字符。

我将其用于过去的select数据

SELECT * FROM Holidays 
WHERE a.dDate >= DATE( NOW( ) ) - INTERVAL 14
DAY AND a.dDate <= DATE( NOW( ) ) - INTERVAL 8
从假日中选择*
其中a.dDate>=日期(现在())-间隔14

DAY和a.dDate您的意思是返回两周并选择该周发生的任何记录吗?您要查找的术语是“日期算术”。注释的可能副本,日期存储为varchar,因此必须首先执行cast。您可以按varchar比较日期