0

我试图为mysql中日期字段的日期范围选择日期和月份部分,它给了我这个错误“操作数应该包含1列”。tablename 是个人日期字段名称是 dob

"SELECT *
FROM personal
WHERE (EXTRACT(MONTH
               FROM dob),
       EXTRACT(DAY
               FROM dob)) BETWEEN '$fromdate' AND '$todate'"

dob 是日期字段,$fromdate 和 $todate 保存从屏幕输入的日期,例如“2014-04-30”和“2014-06-30”

4

3 回答 3

1

使用WHERE子句可以比较多个值,但每次一个。

在您的声明WHERE中,尝试将MONTHandDAY作为单独的值使用逗号分隔但与$fromdateand进行比较$tdate,这是不正确的。

因此是错误:

Operand should contain 1 column(s)

您可能正在寻找这样的解决方案:

如果$fromdate$todate的格式为mmdd,则

SELECT * FROM personal
WHERE date_format( dob, '%m%d' ) 
      BETWEEN '$fromdate' AND '$todate'
于 2014-04-16T09:46:10.987 回答
0

您需要使用CONCAT以便从您的 dob 列中合并日期和月份,然后使用 between 子句进行比较

SELECT 
  * 
FROM
  personal 
WHERE
CONCAT(EXTRACT(MONTH FROM dob),'-',EXTRACT(DAY FROM dob))
BETWEEN '$fromdate'   AND '$todate' 

或者更好地用于DATE_FORMAT仅获取月份和日期,但确保您将标准日期对象存储在列中,并且您提供的格式 DATE_FROMAT必须与您提供的参数的格式匹配

SELECT 
  * 
FROM
  personal 
WHERE
DATE_FROMAT(dob,'%m-%d')
BETWEEN '$fromdate'   AND '$todate' 
于 2014-04-16T09:44:20.500 回答
0

以防万一其他人遇到这个错误(我在意识到我的错误之前与它战斗了几个小时)

如果您不小心将 SELECT 的 cols 放在括号中,您也会收到此错误

因此,如果您急于剪切并粘贴您的字段列表并输入...

INSERT INTO mytablename(col1, col2, col3)
SELECT (col1, col2, col3) FROM anothertable WHERE col4 = 1;

instead of 
INSERT INTO mytablename(col1, col2, col3)
SELECT col1, col2, col3 FROM anothertable WHERE col4 = 1;

它抛出操作数应该包含 1 列错误。

于 2021-03-06T23:28:00.430 回答