Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
Mysql 选择新年12点到2点之间的按月记录_Mysql_Sql - Fatal编程技术网

Mysql 选择新年12点到2点之间的按月记录

Mysql 选择新年12点到2点之间的按月记录,mysql,sql,Mysql,Sql,我有这样的记录: [id | dateofit ] [ 1 | 2017-12-1] 我要使用此查询选择的对象: SELECT id FROM records WHERE MONTH(dateofit) BETWEEN 12 AND 2 问题是12来自2017年和2来自2018年,所以我没有得到任何结果 我试图在第(12)个月和第(1)个月之间像这样替换查询MONTH(dateofit),但仍然存在相同的问题 我要做的是选择记录的月份为[12,1(新年),2(新年)]尝试以下方法: SELE

我有这样的记录:

[id | dateofit ]
[ 1 | 2017-12-1]
我要使用此查询选择的对象:

SELECT id FROM records WHERE MONTH(dateofit) BETWEEN 12 AND 2
问题是
12
来自2017年
2
来自2018年
,所以我没有得到任何结果

我试图在第(12)个月和第(1)个月之间像这样替换查询
MONTH(dateofit)
,但仍然存在相同的问题

我要做的是选择记录的月份为[12,1(新年),2(新年)]

尝试以下方法:

SELECT id FROM records 
WHERE ( YEAR(dateofit) = 2017 AND MONTH(dateofit) = 12) OR 
      ( YEAR(dateofit) = 2018 AND MONTH(dateofit) IN (1, 2));
试试这个:

SELECT id FROM records 
WHERE ( YEAR(dateofit) = 2017 AND MONTH(dateofit) = 12) OR 
      ( YEAR(dateofit) = 2018 AND MONTH(dateofit) IN (1, 2));

为什么不只提供时间范围

SELECT id FROM records WHERE dateofit BETWEEN "2017-12-01 00:00:00" AND "2018-03-01 23:59:59";

为什么不只提供时间范围

SELECT id FROM records WHERE dateofit BETWEEN "2017-12-01 00:00:00" AND "2018-03-01 23:59:59";

这里有两种可能的方法: 如果您只有2017年3月至2018年11月的数据:

SELECT
    id
FROM
    records
WHERE
    MONTH(dateofit) IN (12, 1, 2)
如果您有多年的数据:

SELECT
    id
FROM
    records
WHERE
    dateofit BETWEEN '2017-12-01' AND '2018-02-28'

这里有两种可能的方法: 如果您只有2017年3月至2018年11月的数据:

SELECT
    id
FROM
    records
WHERE
    MONTH(dateofit) IN (12, 1, 2)
如果您有多年的数据:

SELECT
    id
FROM
    records
WHERE
    dateofit BETWEEN '2017-12-01' AND '2018-02-28'

为什么不直接使用dateofit>='2017-12-01'和dataofit<'2018-03-01'
@VamsiPrabhala?您可以将其作为答案发布。也可能是sargable。如果有开始和结束编号(12和2),您如何确定是2017年?@kc2018这就是问题所在,因此我将提供时间戳。在(12,1,2)中使用
如果你不关心年份,为什么不简单地使用
dateofit>='2017-12-01'和dataofit<'2018-03-01'
@VamsiPrabhala作为答案。也可能是sargable。如果有开始和结束编号(12和2),您如何确定是2017年?@kc2018这就是问题所在,因此我将提供时间戳。在(12,1,2)中使用
如果您不关心年份。如果我想选择月份介于
12
2
之间的所有记录,而不关心年份,该怎么办?然后在(12,1,2)中使用
月份(日期)
如果我想选择月份介于
12
2
之间的所有记录,而不考虑年份,该怎么办?然后在(12,1,2)中使用
月份(日期)