IF('08/30/2015'>'08/29/2016')
SELECT '1'
ELSE
SELECT '0'
此SQL語句返回1,因爲它僅比較每月和每天並忽略年份。我知道我正在比較兩個varchar值 - 不是日期 - 但我想知道該比較的SQL遵循的邏輯是什麼?varchar格式的日期比較
有人可以幫我嗎?同樣的情況在一個項目中給了我一個問題,我通過投射到目前爲止修復了這個問題。但是,我想知道這背後的邏輯。我搜查了它,但沒有找到合適的解釋。
IF('08/30/2015'>'08/29/2016')
SELECT '1'
ELSE
SELECT '0'
此SQL語句返回1,因爲它僅比較每月和每天並忽略年份。我知道我正在比較兩個varchar值 - 不是日期 - 但我想知道該比較的SQL遵循的邏輯是什麼?varchar格式的日期比較
有人可以幫我嗎?同樣的情況在一個項目中給了我一個問題,我通過投射到目前爲止修復了這個問題。但是,我想知道這背後的邏輯。我搜查了它,但沒有找到合適的解釋。
它比較兩個字符串,所以即使人類會查看這些並考慮日期,SQL只會看到一個字符串比另一個更大。如果你拿出斜槓並且只是把數字放在那裏,它可能會更有意義:08302015 > 08292016
。
您的值不是日期。他們是字符串。你可以這樣做:
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';
這些不需要轉換,因爲字符串比較正確。
它比較他們作爲字符串,自然。它將逐個字符進行比較,第一個不同的是3對2,3大於2,因此結果爲1. –