我试图在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
答案 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
尝试同时使用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'
答案 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 列错误。