2

20120817のように、日付が文字列として保存されている日付列があります。残念ながら、この列に入力されるテキストフォームフィールドはフリーテキストであるため、この列に「E」または「whatever」が表示されることを保証できません。そして、すでに数人以上が持っています。

私がする必要があるのは、文字列列を日付列に変換することです。もちろん、変換はランダムな文字列文字を拒否します。文字列を変換するだけでなく、日付以外の変換可能な文字列を除外する派生列を作成する方法はありますか?

テーブルに日付以外の変換可能な文字列がない場合は、次のように機能します。

ADD [convertedDate] AS CONVERT(DATE, [stringDate], 102)

そして、それは私が作成したテストテーブルで完全に機能します。しかし、他の変換不可能な文字列を導入すると、明らかな理由で、「文字列から日付や時刻を変換するときに変換に失敗しました」という恐ろしいエラーが発生します。

この派生列コードに追加できる変換不可能な要素をキャッチする関数はありますか?それとも、ビューまたは関数がこれを処理する唯一の(または最良の)方法ですか?運が悪かったので、IsDate()をいじってみました。

ありがとうございました!

4

3 に答える 3

1

SQL Server 2012を使用している場合は、try_convert関数を使用できます。

http://msdn.microsoft.com/en-us/library/hh230993.aspx

変換が成功した場合は正常に機能しますが、変換が失敗した場合はnullを返します

ADD [convertedDate] AS TRY_CONVERT(DATE、[stringDate]、102)

于 2012-08-17T17:00:13.763 に答える
1

と呼ばれる関数がありISDATE(date)ます。CASEステートメントまたはクエリのWHERE部分で使用できます...これは、実行方法によって異なります。たとえば、次のようなものです。

ADD [convertedDate] AS CASE WHEN ISDATE([stringDate]) = 1 THEN CONVERT(DATE,[stringDate], 102) ELSE NULL END
于 2012-08-17T17:00:50.403 に答える
0

これはあなたにいくつかのアイデアを与えるはずです...

DECLARE @date1 varchar(50)
DECLARE @date2 varchar(50)
SET @date1 = '20120101'
SET @date2 = 'e20120101'

SELECT
ISDATE(@date1),
ISDATE(@date2),
CASE WHEN ISDATE(@date1) = 1 THEN CONVERT(SMALLDATETIME,@date1) END,
CASE WHEN ISDATE(@date2) = 1 THEN CONVERT(SMALLDATETIME,@date2) END
于 2012-08-17T17:15:06.250 に答える