繁体   English   中英

在从html表单获取的日期之间使用php从mysql中选择数据,但日期存储在日,月,年的3个不同列中

[英]Select data from mysql using php in between dates got from html form, but date is stored in 3 different columns under day, month, year

我有一个数据库,我想从html表单中选择日期之间的日期作为数据。

假设数据库具有列custid(int)(5)query(varchar)(100)day(int)(2)month(int)(2)year(int)(2)

我从表格中获取日期为dd/mm/yy

因此,我尝试了这个,但没有用。

SELECT * FROM table
WHERE custid = 'x' AND 
(CONCAT(day'./.'month'./.'year) AS DATE BETWEEN '01/01/01' AND '01/01/99');

//,其中01/01/2001是开始日期,而01/01/99从html格式接收的, x是从01/01/99接收的custid )。

有什么解决的办法吗?

sql错误:

1064-您的SQL语法有误; 检查与您的MariaDB服务器版本相对应的手册以使用正确的语法

在' month './。附近 year )作为'01 / 01/2001'和'01 / 01/2099'之间的日期)限制0,25'在第3行

编辑1:

浏览concat()函数文档并通过jens回答后,更新后的sql查询。

SELECT * FROM table
WHERE custid = 'x' AND 
(CONCAT(day','/','month','/','year) AS DATE BETWEEN '01/01/01' AND '01/01/99');

您的concat语法必须通过:

(CONCAT(day','/','month','/','year) BETWEEN '01/01/01' AND '01/01/99');

顺便说一句:这使字符串比较而不是日期比较,因此您应该更改为日期格式。

STR_TO_DATE(CONCAT('day','/','month','/','year'), '%d/%m/%Y') between STR_TO_DATE('01/01/01' ) and STR_TO_DATE('01/01/99', '%d/%m/%Y')

有关concat语法的更多信息,请参见https://www.w3schools.com/sql/func_mysql_concat.asp以及str_to_date语法https://www.w3schools.com/sql/func_mysql_str_to_date.asp

一些提示:不要在带有列的where子句中使用函数或计算。

在您的情况下:1.从表单中展开日期并得到3部分。 2.您可以这样编写SQL:

SELECT * FROM table
WHERE custid = 'x' AND
(year >= '1' AND year <='99' and month >= '1' and month <= '12' and day >= '1' and day <= '12')

而不是将其作为日期进行比较,我使用concat()将其用作数字值,然后使用php函数,我也将mhtml格式的日期也转换为数字,然后使用函数间的简单性检查值是否介于两者之间。极限。

然后sql变成

SELECT * FROM `ledger-company` 
WHERE `companyid` = '10' 
AND (CONCAT(year,month,day) BETWEEN '010101' AND '990199')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM