php - 在从 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');
解决方案
您的 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
推荐阅读
- javascript - 从 JavaScript 函数更改数据属性?
- php - 我可以在 Laravel 上使用带有 Firebase JWT 令牌的会话来进一步优化我的 API 请求吗?
- c++ - 将 std::set 作为键插入 std::map
- sql - SQL 日期规范化和对齐
- ruby-on-rails - Rails Wicked_PDF ActiveStorage
- java - 在使用 Hibernate 4 时,我需要对 org.hibernate.cache.EhCacheProvider 有什么依赖?
- jquery - 如何仅在 jquery validate 中隐藏默认错误消息?
- mysql - MySQL 外键约束不适用于我的数据库设计
- google-chrome - 如何迁移所有 Chrome 扩展程序的设置
- excel - 连接匹配值的动态数量