选择日期格式的数据

时间:2013-06-10 11:23:31

标签: sql sql-server sql-server-2008

我有一个查询,我想从数据为日期的列中选择数据。问题是数据是文本和日期的混合。

这个SQL位只返回最长的文本字段:

SELECT MAX(field_value)

日期确实发生时,格式始终为xx / xx / xxxx

我正在尝试选择最近的日期。

我正在使用MS SQL。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

使用ISDATECONVERT

尝试此操作
SELECT MAX(CONVERT(DateTime, MaybeDate))
FROM (
  SELECT MaybeDate
  FROM MyTable
  WHERE ISDATE(MaybeDate) = 1) T

您也可以使用MAX(CAST(MaybeDate AS DateTime))。我在CONVERT年之前就已经习惯了(也许是坏的)习惯,并坚持使用它。

答案 1 :(得分:0)

要在没有转换错误的情况下执行此操作:

select max(case when isdate(col) = 1 then cast(col as date) end)  -- or use convert()
from . . .

SQL语句指定操作顺序。因此,即使在子查询中包含where子句,也只能保证只转换日期。实际上,SQL Server优化器足够“智能”,可以在引入数据时进行转换,然后再进行过滤。

保证操作顺序的唯一操作是case语句,甚至有例外。

答案 2 :(得分:0)

另一种解决方案是在WHERE子句中使用PATINDEX。

SELECT PATINDEX('[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]', field_value)

这种方法的问题是你真的不确定某些东西是否有约会(例如99/99/9999不是日期)。 IS_DATE的问题在于它取决于配置(例如DATEFORMAT)。 因此,请使用适当的选项。