我试图为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
试图使用MONTH
和DAY
作为逗号分隔的单独值,但与$fromdate
和$tdate
进行比较,这是不正确的。
因此出现了错误:
Operand should contain 1 column(s)
你可能正在寻找这样的解决方案:
如果$fromdate
和$todate
是mmdd
的格式,则
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列错误。