$GOPATH/src/
此SQL语句返回1,因为它仅比较月和日并忽略年份。我知道我正在比较两个varchar值 - 而不是日期 - 但是我想知道SQL对于这个比较有什么逻辑?
是的,有人可以帮帮我吗?这个场景在一个项目中给了我一个问题,我通过转换来解决这个问题。但是,我想知道这背后的逻辑。我搜索了它,但没有找到正确的解释。答案 0 :(得分:4)
您的值不是日期。他们是字符串。你可以这样做:
IF (convert(date, '08/30/2015') > convert(date, '08/29/2016'))
SELECT '1'
ELSE
SELECT '0';
(注意:这是否有效可能取决于日期格式的国际化设置。我认为这是为了理解MDY格式。)
但为什么要这么麻烦?只需使用ISO标准日期格式(YYYY-MM-DD):
IF ('2015-08-30' > '2015-08-29')
SELECT '1'
ELSE
SELECT '0';
这些不需要转换,因为字符串比较正确。
答案 1 :(得分:0)
它比较了两个字符串,所以即使人类会查看这些字符串并考虑日期,SQL只会看到一个字符串大于另一个字符串。如果你拿出斜线并将数字放在那里,它可能更有意义:08302015 > 08292016
。