为什么在 CONCAT 之后 MySQL 中的变量不相等?

Why after CONCAT are not variables equal in MySQL?

SET @date1 = 2015-04-06;
SET @date2 = "2015-04-06";

SELECT @date1 = @date2;

returns 0

SELECT "2015-04-06" = 2015-04-06;

returns 0

SELECT CONCAT('2015-04-06') = @date1;

returns 0

SELECT CONCAT('2015-04-06') = @date2;

returns 1 - 为什么?我做错了什么?更明显的是:

SELECT CONCAT('2015-04-06') = CONCAT('2015-04-06');

returns 1

上下文:我正在尝试编写函数 is_bussiness_day(date),它使用 Werner Kremer 于 2009 年 8 月 4 日发布的 function getEaster(year) 3:06pm在 http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html

我看到的唯一区别是 date1 被赋予了一个日期而 date2 被赋予了一个字符串。 更改 date2 以获取日期,您的 concat = date2 正在运行。 要比较 2 个字符串,必须使用 strcmp 函数来完成。

STRCMP( CONCAT('2015-04-06'), CONCAT('2015-04-06'));

结果为 0(零)。 希望,这有助于...

https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

问题是你设置@date1的时候没有把2015-04-06放在引号里。所以它将 2015-04-06 解释为算术表达式,而不是字符串。等于:

SET @date1 = 2015 - 4 - 6;

@date1 设置为数字 2005。更改为:

SET @date1 = '2015-04-06'

然后

SELECET @date1 = @date2

将 return 1.