2011-07-28 8 views
3

テーブルの日付カラムはdatetimeではなくVARCHARです。varcharカラムのSELECT最小日付

例:

entry 
'03/01/2011' 
'03/22/2011' 
'05/22/2010' 

私は

SELECT min(entry) FROM table 

を行う際には、アルファベット順に分であるように私は'03/01/2011' を取得します。私は'05/22/2010 'を検索したいのですが、それは最小の日付です。列をdatetimeに変換してminを取得するにはどうすればよいですか?すべてのエントリを仮定し

おかげ

+5

答えが表示されているにもかかわらず、これはうまくいきます。これが、日付をvarchar列に格納しない理由です。 – Jamiec

答えて

9

datetimeとして 'キャスト可能' であり:

entrydatetimeをイマイチいくつかのケースがあるかもしれないと仮定すると、
SELECT MIN(CAST(entry as datetime)) 
FROM table 

SELECT MIN(CAST(ISNULL(NULLIF(ISDATE([entry]),0),'31/12/9999') as datetime)) 
FROM table 

すべてのレコードは、日付の列です

場合@Steve Wellensが推奨されているように、私が作る将来の問題

1

を保存するためにdatetimeフィールドにDATETYPEを変更しますあなたのvarcharコースのCAST or CONVERTを使用してdate(またはdatetime)。

0

try CASTです。

SELECT min(CAST(entry AS DATETIME)) FROM table 

これが役に立ちます。

7

データベーススキーマを修正します。列の型をdatetimeに変更します。さもなければ永遠に問題があります。

+1

+1また、SQL 2008以上を使用している場合は、datetimeではなくdateを使用します。時間データを保存しないので、論理ディスクと物理ディスクの両方に5バイトの行を保存します。 – brian

+0

質問者の環境では質問に答えることができないため-1です。 – mson

+0

タグによると、環境はSQL Serverです。多分あなたは要件がそれを許さないことを意味しました。けっこうだ。しかし、この提案は現在の問題を解決するだけでなく、将来的にはさらに多くの問題を引き起こす可能性があります。建設的な提案は良いことです。 –

関連する問題