UNIX_TIMESTAMP,MySQL查询中的日期不起作用

时间:2019-02-04 05:57:45

标签: php mysql unix-timestamp

我将日期存储为varchar,存储在MySQL数据库中。我知道这并不理想..但是我现在有什么。

示例日期:

if (!empty($start_date)) {
    $where_clause[] = "UNIX_TIMESTAMP(start_date) >= '" . $start_date . "'";
}

if (!empty($end_date)) {
    $where_clause[] = "UNIX_TIMESTAMP(end_date) <= '" . $end_date . "'";
}

我正在尝试编写一个查询,以检查这种格式的日期是否在范围内

当开始日期与结束日期相同的月份但不同的年份时,我遇到了问题。

dict1 = {'providers': 'aetna, united_health'}
dict2 = {'aetna': ['13e2345', '13e2346'], 'bcbs': ['901E12'], 'united_health': []}

providers = set(dict1['providers'].split(', '))
new_dict2 = {k: v for k, v in dict2.items() if k in providers}
print(new_dict2)

我了解到UNIX_TIMESTAMP可以允许我执行此操作,但是它似乎无法正常工作。

如何使此查询有效?

1 个答案:

答案 0 :(得分:2)

也许最简单的方法就是将使用STR_TO_DATE的MySQL文本日期与PHP代码中正确的ISO日期文字进行比较。也就是说,按照以下方式使用查询:

SELECT *
FROM yourTable
WHERE STR_TO_DATE(start_date, '%m/%d/%Y') > ?;

对于?占位符,您将绑定诸如date('Y-m-d', strtotime('11/22/2019')) not '11/22/2019'之类的值,后者是非可用的非ISO格式

正如您在问题开始时提到的那样,最好将所有日期存储为真实日期类型的列类型,而不是文本。