0

私はテーブルを持っています:

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 フィドル

次に、フィールドに最新の日付を含む各人物の 1 つの行を見つける必要があり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この選択ステートメントが必要なものを返すと、集計関数を使用して最新の日付を返すことができるはずです。

4

1 に答える 1

3

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 フィドル

于 2013-01-07T10:33:28.973 に答える