2010-10-08 89 views
0

我正在写一个查询来获取列的所有值的结果,该列是varchar类型..小于'29/08/2010'(date )SQL Server查询帮助...需要将varchar转换为日期

我的查询:

SELECT * FROM EMPLOYEES WHERE COLUMN1 < '29/08/2010' 

这里COLUMN1是varchar类型。我正在使用SQL Server 2005

有没有办法让这成为可能.. ??

请帮我。

在此先感谢

+2

无论您做什么,请记住要将该列更改为datetime数据类型。它将在未来避免巨大的问题。 – 2010-10-08 06:17:34

回答

1

你有你的COLUM试图

SELECT * FROM EMPLOYEES WHERE CONVERT(datetime, COLUMN1, 103) > CONVERT(datetime, '29/08/2010', 103) 
+0

啊是的 - 现在改变它,并看到它是上述相同的答案 - 啊:) – ramad 2010-10-08 06:23:10

+0

除了我看到上面的例子使用110(mm-dd-yy) - 我会说它应该是103(日/月/年)。 – ramad 2010-10-08 06:25:32

+0

在哪里,而不是在哪里 – anishMarokey 2010-10-08 06:33:41

2

你可以尝试

SELECT * FROM EMPLOYEES WHERE convert(datetime,COLUMN1,110) < convert(datetime, '29/08/2010',110) 
+0

我得到这个错误...一个字符数据类型转换为日期时间数据类型导致超出范围日期时间值 – kayteen 2010-10-08 06:18:22

+0

在列中将有一些无效日期将有 – anishMarokey 2010-10-08 06:33:07

+0

我检查了数据...我发现所有的值都是这种格式'dd/mm/yyyy' – kayteen 2010-10-08 06:40:06

0

如果您严格存储数据的数据N1,那么为什么你的数据类型定义为varchar?

从性能的角度来看,它会杀死性能,因为将Varchar转换为DateTime或任何其他的会使索引效率低下,如果有的话。通常使用RIGHT()或CONVERT,LIKE'%%'或Like'a%'等函数将使WHERE子句成为不可Sargable,从而导致索引扫描操作检索数据。

+0

我有这个列作为一个动态的..用于生成动态SQL ...有时我可能会得到像NAME/EMAIL/CURRENCY/DATE – kayteen 2010-10-08 08:49:19