Php mysql中的日期搜索
我在varchar中有一个名为“tran_date”的列 我在表中有1条记录的传输日期为2020年12月30日 当我使用以下命令搜索此查询时:Php mysql中的日期搜索,php,mysql,Php,Mysql,我在varchar中有一个名为“tran_date”的列 我在表中有1条记录的传输日期为2020年12月30日 当我使用以下命令搜索此查询时: (SELECT * FROM `financial_transactions` where account_id=1 and tran_date>'12/26/2020') 它返回一个结果 但是,当我使用此查询进行搜索时: (SELECT * FROM `financial_transactions` where account_id=1 a
(SELECT * FROM `financial_transactions` where account_id=1 and
tran_date>'12/26/2020')
它返回一个结果
但是,当我使用此查询进行搜索时:
(SELECT * FROM `financial_transactions` where account_id=1 and
tran_date>'12/26/2020' and tran_date <'01/01/2021')
它不返回任何内容
交易日期='12/30/2020'大于'12/26/2020'小于'01/01/2021'
我很难理解这一点。恐怕错误在你自己的第一句话中。日期不应以这种方式存储在VARCHAR类型字段中。 使用您拥有的文本对VARCHAR类型字段执行运算符是行不通的。 写“MM/DD/YYYY”这样的日期也是一个糟糕的选择 最好是将日期存储在日期类型字段中 这里有更多关于上述类型的信息; 话虽如此。。。 如果您出于方便而想使用这些操作符,并且我能理解为什么,请继续阅读 为了测试,我自己创建了一个测试表
CREATE TABLE `financial_transactions` (
`account_id` int NOT NULL,
`tran_date` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `financial_transactions` (`account_id`, `tran_date`) VALUES
(1, '12/26/2020'),
(1, '12/27/2020'),
(1, '12/25/2020');
COMMIT;
添加一个新列,该列将在INT字段类型中包含日期
ALTER TABLE `financial_transactions` ADD `transDate` INT NOT NULL AFTER `tran_date`;
如果此列更经常用于执行查找,请添加索引
用信息填充该列此查询将采用您的日期/时间格式,并将其添加到格式YYYYMMDD的新INT列中
现在,这类查询将产生所需的结果
SELECT * FROM `financial_transactions` WHERE `transDate` > 20201226;
SELECT * FROM `financial_transactions` WHERE `transDate` > 20201226 AND `transDate` < 20210101;
日期不应存储在VARCHAR中,您可以在日期之间运行此操作
SELECT *
FROM financial_transactions
where account_id=1 and cast(NOW() as date) tran_date>'12/26/2020' and tran_date <'01/01/2021'
您没有按日期搜索。您正在搜索字符串。这就是为什么你应该将日期存储为日期,而不是字符串。请停止投票这些类型的问题,因为作者犯了一个明显的错误。问题清晰,答案明确,显示了预期结果和实际结果
SELECT * FROM `financial_transactions` WHERE `transDate` > 20201226;
SELECT * FROM `financial_transactions` WHERE `transDate` > 20201226 AND `transDate` < 20210101;
SELECT *
FROM financial_transactions
where account_id=1 and cast(NOW() as date) tran_date>'12/26/2020' and tran_date <'01/01/2021'