选择varchar列的最小日期

Yad*_*ada 3 sql sql-server

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

例如

entry
'03/01/2011'
'03/22/2011'
'05/22/2010'
Run Code Online (Sandbox Code Playgroud)

当我做的时候

SELECT min(entry) FROM table
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Cur*_*urt 9

假设所有条目都是"可投射的" datetime:

SELECT MIN(CAST(entry as datetime))
FROM table
Run Code Online (Sandbox Code Playgroud)

假设可能有一些情况下,entry心不是一个datetime:

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

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


Ste*_*ens 7

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