错误消息“操作数应包含1列”

时间:2014-04-16 09:33:52

标签: mysql date-formatting mysql-error-1241

我试图在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

3 个答案:

答案 0 :(得分:0)

您需要使用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' 

答案 1 :(得分:0)

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

在您的陈述中WHERE尝试同时使用MONTHDAY作为单独的值以逗号分隔,但与$fromdate$tdate进行比较正确。

因此是错误:

Operand should contain 1 column(s)

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

如果$fromdate$todate的格式为mmdd,那么

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

答案 2 :(得分:0)

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

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

因此,如果您赶时间,请剪切并粘贴您的字段列表并输入...

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 列错误。