尝试在SQL Server中的
ISDATE()
函数。如果1,选择有效日期。如果是0则选择无效的日期。
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
WHERE ISDATE(LoginTime) = 1
点击这里查看结果
根据你的更新,我需要只提取日期,删除时间,那么你可以简单地使用内部的CONVERT
SELECT CONVERT(VARCHAR, LoginTime, 101) FROM AuditTrail
SELECT LEFT(LoginTime,10) FROM AuditTrail
EDIT 2 :
错误的主要原因是你在WHERE子句中的日期,即。
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) <=
CAST('06/18/2012' AS DATE)
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) <=
CAST('18/06/2012' AS DATE)
在编辑2中,第一个查询试图以mm/dd/yyyy
格式过滤,而第二个查询试图以dd/mm/yyyy
格式过滤。其中任何一个都会失败并抛出错误
将varchar数据类型转换为datetime数据类型的结果是
导致一个超出范围的值。
因此,请确保用mm/dd/yyyy
或dd/mm/yyyy
格式来过滤日期,以你的数据库中的格式为准。