varchar格式的日期比较

时间:2016-09-07 21:23:11

标签: sql sql-server

$GOPATH/src/

此SQL语句返回1,因为它仅比较月和日并忽略年份。我知道我正在比较两个varchar值 - 而不是日期 - 但是我想知道SQL对于这个比较有什么逻辑?

是的,有人可以帮帮我吗?这个场景在一个项目中给了我一个问题,我通过转换来解决这个问题。但是,我想知道这背后的逻辑。我搜索了它,但没有找到正确的解释。

2 个答案:

答案 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