我有一个表“2017年12月13日 - 2017年12月25日”的主键,它存储为varchar。
我如何查询,以便从2017年1月至12月的搜索条目中获得结果列表?
答案 0 :(得分:1)
在你的mysql表中将你的varchar转换为2列,如startDate和endDate。
var str =“2017年12月13日 - 2017年12月25日”; var arr = str.split(' - ');
var startDate = new Date(arr [0]); var endDate = new Date(arr [1]);
如果将它们存储到数据库中,则很容易在sql中编写查询。
答案 1 :(得分:0)
您可以将它们存储为单独的日期,如下所示:
CREATE TABLE
`dates`
(
`date_id` INT PRIMARY KEY AUTO_INCREMENT,
`start_date` DATE,
`end_date` DATE
);
INSERT INTO
`dates`
(`start_date`, `end_date`)
VALUES
('2017-12-13', '2017-12-25');
然后,如果您想根据范围进行查询,可以执行以下操作:
SELECT
DATE_FORMAT(`start_date`, '%M %d, %Y') AS `start_date`,
DATE_FORMAT(`end_date`, '%M %d, %Y') AS `end_date`
FROM
`dates`
WHERE
`start_date` BETWEEN '2017-01-01' AND '2017-12-31';
提供:
start_date | end_date
-------------------------------------------
December 13, 2017 | December 25, 2017
现在......要到达那里,你必须解析现有的记录,所以假设一个表:
CREATE TABLE
`fixme`
(
`date_id` VARCHAR(50)
);
INSERT INTO
`fixme`
VALUES
('December 13, 2017 - December 25, 2017');
您可以将它们拆分为日期并将其插入新表中:
SELECT
STR_TO_DATE(SUBSTRING_INDEX(`date_id`, ' - ', 1),'%M %d, %Y') AS `start_date`,
STR_TO_DATE(SUBSTRING(`date_id`, LOCATE(' - ', `date_id`)+2),'%M %d, %Y') AS `end_date`
FROM
`fixme`;
结果:
start_date | end_date
----------------------
2017-12-13 | 2017-12-25