T-SQLで文字列を日付に変換するにはどうすればよいですか?
私のテストケースは文字列です: '24.04.2012'
T-SQLで文字列を日付に変換するにはどうすればよいですか?
私のテストケースは文字列です: '24.04.2012'
回答:
CONVERT(datetime, '24.04.2012', 104)
トリックを行う必要があります。詳細については、こちらを参照してください:CASTおよびCONVERT(Transact-SQL)
CONVERT(DateTime, DateField, 104)
データベースがMSSQL Server 2012以降であると仮定すると、これが機能するソリューションです。基本的なステートメントには、インラインのtry-parseが含まれています。
SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;
実稼働バージョンで実装したものは次のとおりです。
UPDATE dbo.StagingInputReview
SET ReviewedOn =
ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
-- Check for empty/null/'NULL' text
WHERE not ReviewedOnText is null
AND RTrim(LTrim(ReviewedOnText))<>''
AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';
ModifiedOn列とModifiedBy列は、内部データベース追跡のみを目的としています。
これらのMicrosoftMSDNリファレンスも参照してください。
CONVERTは機能しますが、実際には使用しないでください。SQL-Serverで文字列値を解析する理由を自問する必要があります。これが一部のデータを手動で修正する1回限りのジョブであり、そのデータを再度取得しない場合、これは問題ありませんが、アプリケーションがこれを使用している場合は、何かを変更する必要があります。最良の方法は、「日付」データ型を使用することです。これがユーザー入力の場合、これはさらに悪いことです。次に、最初にクライアントでチェックを行う必要があります。SQL-Serverが日付を予期する場所に文字列値を本当に渡したい場合は、いつでもISO形式( 'YYYYMMDD')を使用でき、自動的に変換されます。
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate
必要なことを実行します、結果:
2012-04-24 00:00:00.000