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

fgw7neuy  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(266)

我有一个数据库,我想选择与日期之间的日期从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是从html表单接收的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');
iecba09b

iecba09b1#

我没有将它作为日期进行比较,而是使用concat()将它作为一个数值,然后使用php函数将从mhtml表单得到的日期也转换为数字,然后使用简单的between函数检查值是否在限制之间。
然后sql就变成了

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

fwzugrvs2#

一些提示:不要在带有列的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')
jtw3ybtb

jtw3ybtb3#

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\u to\u date语法https://www.w3schools.com/sql/func_mysql_str_to_date.asp

相关问题