Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql中的日期搜索_Php_Mysql - Fatal编程技术网

Php mysql中的日期搜索

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

我在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 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'