我的表的日期列是VARCHAR而不是datetime。
例如
entry
'03/01/2011'
'03/22/2011'
'05/22/2010'
当我做
时SELECT min(entry) FROM table
我将得到'03 / 01/2011',因为它是字母顺序的分钟。我想要检索'05 / 22/2010'而不是最小日期。如何将列转换为datetime并获取最小值。
由于
答案 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
希望这有帮助。