0

MSSQL 2008を使用していて、たとえばマットの数値のデータを含むAbsoluteDatesというフィールドがあります。

AbsoluteDates
20051216
20051217
20051218
10000
90
600

私がする必要があるのは、長さが8の数字ではない日付を無視し、結果を日時に変換する「Select」ステートメントです。したがって、長さがそうでないときに何かを生成する必要があるため、caseステートメントのようになります。 8文字、たとえば「NotValid」という単語

したがって、たとえば、カレンダーからAbosluteDatesを選択します。ここで、lenth = 9の場合、上記と同じデータがある場合、次の結果が得られます。

AbsoluteDates
2005-12-16 00:00:00.000
2005-12-17 00:00:00.000
2005-12-18 00:00:00.000
NotValid
NotValid
NotValid
4

1 に答える 1

0

varcharにキャストしてから、次のような日時にキャストしてから、varcharに戻すことができます。

SELECT CASE WHEN LEN(DateNumber) = 8 AND ISDATE(RTRIM(DateNumber)) = 1
    THEN CONVERT(nvarchar(25), 
        CAST(CAST(DateNumber as varchar(10)) as datetime), 121)
    ELSE 'NotValid' 
    END AS Result
FROM (
    SELECT 20051216 AS DateNumber
    UNION SELECT 20051217
    UNION SELECT 20051218
    UNION SELECT 10000
    UNION SELECT 90
    UNION SELECT 600
    UNION SELECT 99421946
) MySubQuery
ORDER BY Result

ハードコードされた検索を実際のデータテーブルに置き換えるだけです

于 2012-07-17T16:55:49.923 に答える