错误消息"Operand should contain 1 column(s)"



我试图为mysql中的日期字段的日期范围选择日期和月份部分,结果出现了错误"操作数应包含1列"。表名是个人的日期字段名称为dob

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

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

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

在您的语句中,WHERE试图使用MONTHDAY作为逗号分隔的单独值,但与$fromdate$tdate进行比较,这是不正确的。

因此出现了错误:

Operand should contain 1 column(s)

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

如果$fromdate$todatemmdd的格式,则

SELECT * FROM personal
WHERE date_format( dob, '%m%d' ) 
      BETWEEN '$fromdate' AND '$todate'

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

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' 

为了防止其他人遇到这个错误(我与它斗争了几个小时才意识到我的错误)

如果您不小心将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列错误。

相关内容

  • 没有找到相关文章