Mysql 从激活之日起超过一年的输出数据

Mysql 从激活之日起超过一年的输出数据,mysql,sql,Mysql,Sql,我有几位客户: CREATE TABLE clients ( id INT AUTO_INCREMENT NOT NULL, tariff VARCHAR(255) NOT NULL NULL, validity VARCHAR(255) NOT NULL, phoneNumber VARCHAR(255) NOT NULL , PRIMARY KEY(id) ) ENGINE=InnoDB CHARACTER SET=UTF8; INSERT INTO clients (id,tariff

我有几位客户:

CREATE TABLE clients (
id  INT AUTO_INCREMENT NOT NULL,
tariff VARCHAR(255) NOT NULL NULL,
validity VARCHAR(255) NOT NULL,
phoneNumber VARCHAR(255) NOT NULL ,
PRIMARY KEY(id)
) ENGINE=InnoDB CHARACTER SET=UTF8;

INSERT INTO clients (id,tariff,validity,phoneNumber) VALUES    (1,"tariff1","10-02-2015","380938474271");
INSERT INTO clients (id,tariff,validity,phoneNumber) VALUES (2,"tariff1","10-02-2016","380938474272");
INSERT INTO clients (id,tariff,validity,phoneNumber) VALUES (3,"tariff2","12-01-2017","380938474273");
INSERT INTO clients (id,tariff,validity,phoneNumber) VALUES (4,"tariff3","10-01-2017","380938474274");
INSERT INTO clients (id,tariff,validity,phoneNumber) VALUES (5,"tariff3","11-02-2017","380938474275");
我的字段有效期是激活日期。
如何从激活日期超过一年的表字段中进行选择?例如,对于此表,它将显示id为1和2的客户端。

您应该将varchar值转换为正确的日期,并检查是否
select * from clients
where str_to_date(validity , '%d-%m-%Y') < date_sub(now(), INTERVAL 1 YEAR )
从客户端选择*
其中str_to_date(有效期,'%d-%m-%Y')
您应该将varchar值转换为一个正确的日期,并检查是否
select * from clients
where str_to_date(validity , '%d-%m-%Y') < date_sub(now(), INTERVAL 1 YEAR )
从客户端选择*
其中str_to_date(有效期,'%d-%m-%Y')
为什么要在varchar列中存储日期?MySQL没有任何正确的日期数据类型吗?不要将日期存储为
varchar
,也不要使用
mm-dd-yyyy
,这只会在以后给您带来麻烦。好的。我会使用日期时间格式。我尝试:从
客户机中选择*WHERE(activation\u date>=NOW()激活日期我在你的表中看不到激活日期。你是说有效期吗?它应该是
-
,而不是
+
。为什么要在varchar列中存储日期?MySQL没有任何正确的日期数据类型吗?不要将日期存储为
varchar
,也不要使用
mm dd yyyy
的时髦格式,这只会给你带来麻烦呃,好的。我会使用datetime格式。我会尝试:从
客户机中选择*WHERE(activation\u date>=NOW()激活日期我在你的表格中没有看到激活日期。你是说有效期吗?应该是
-
,而不是
+
。他说应该选择id 1和2。这只会选择id 1。不清楚他的问题是什么。@Barmar..Now()-1 Year应该返回第1行和第2行row 2仅在5个月前,您的查询返回的行数超过1年前。他说它应该选择id 1和2。这将只选择id 1。不清楚他的问题是什么。@Barmar..Now()-1 Year应该返回第1行和第2行row 2仅在5个月前,您的查询返回的行数超过1年前。