将Char字段转换为DateTime,但仅当字段包含dd/mm/yyyy格式的日期时- Sql Server 2005



我有一个表:

Comments (Id int identity primary key, PersonId Int(6), Comment1 Char(60))

字段Comment1应该包含非必要的注释,然而该字段已被用于存储非必要的注释,但也用于存储格式为dd/mm/yyyy的重要日期。

例如,表中的数据如下所示:
* Id * PersonId *    Comment1     *
|  1 |        5 | Likes Chocolate |
|  2 |        5 | 19/05/1992      |
|  3 |        5 | 23/07/1999      |
|  4 |        5 | 05/06/1994      |
|  5 |        8 | 07/12/1998      |
|  6 |        8 | Is very Tall    |
|  7 |        8 | 24/05/1995      |
|  8 |        8 | 16/10/2002      |
|  9 |       11 | 13/11/2005      |
| 10 |       11 | 21/09/2000      |
| 11 |       11 | 8/99/100/23-1   |
SQL小提琴

他们现在需要在Comment1字段中为每个人找到包含最近日期的一行。

首先,我尝试使用以下查询删除那些不包含有效日期的行:

Select 
  Id,
  PersonId,
  Case 
    When IsDate(Comment1) = 1 
    Then convert(date, cast(rtrim(Comment1) as nvarchar), 103)
    Else NULL
  End
From Comments

但这只返回了我:

* Id * PersonId *    Comment1     *
|  4 |        5 | 1994-06-05      |
|  5 |        8 | 1998-12-07      |

其他行为(null)。这可以在SQL Fiddle链接中看到。

谁能告诉我我哪里做错了?

一旦这个选择语句返回我所需要的,我希望我应该能够使用聚合函数返回每个PersonId的最近日期。

使用SET DATEFORMAT

set dateformat dmy
Select 
  Id,
  PersonId,
  Case 
    When IsDate(Comment1) = 1 
    Then convert(date, cast(rtrim(Comment1) as nvarchar), 103)
    Else NULL 
  End
From Comments
SQL小提琴

相关内容

  • 没有找到相关文章