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

问题描述

我有一个数据库,我想在其中选择从 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也是收到的custid)。

有什么办法可以解决吗?

sql中的错误:

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

' month'./.'附近 year) AS DATE BETWEEN '01/01/2001' AND '01/01/2099') LIMIT 0, 25' at line 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');

标签: phpmysqldate

解决方案


您的 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


推荐阅读