选择varchar列的最小日期

时间:2011-07-28 15:40:25

标签: sql sql-server

我的表的日期列是VARCHAR而不是datetime。

例如

entry
'03/01/2011'
'03/22/2011'
'05/22/2010'

当我做

SELECT min(entry) FROM table

我将得到'03 / 01/2011',因为它是字母顺序的分钟。我想要检索'05 / 22/2010'而不是最小日期。如何将列转换为datetime并获取最小值。

由于

4 个答案:

答案 0 :(得分:9)

假设所有条目都是“可投递”为datetime

SELECT MIN(CAST(entry as datetime))
FROM table

假设某些情况entry不是datetime

SELECT MIN(CAST(ISNULL(NULLIF(ISDATE([entry]),0),'31/12/9999') as datetime))
FROM table

如果所有记录都是日期列,正如@Steve Wellens建议的那样,我会将日期类型更改为datetime字段以节省未来问题

答案 1 :(得分:7)

我会修复你的数据库架构。将列类型更改为日期时间。否则你会永远遇到问题。

答案 2 :(得分:1)

当然使用CAST or CONVERT使varchar成为date(或datetime)。

答案 3 :(得分:0)

尝试CAST

SELECT min(CAST(entry AS DATETIME)) FROM table

希望这有帮助。