0

列があり、次のnvarcharようなさまざまな形式の日付が含まれています

'2/1/2012',
'2/2/12',
'20 01 12',
'20 03 2012',
'20.01.12',
'30.04.2012',
'20jan 12',
'20-MARCH-2012',
'22MARCH2012',
'23 may 2012',
'23-MAR-2012',
'26MAR-2012',
'27TH JAN 4660',
'CHL. Date- 30.01.2012',
'APRIL/12/2012',
'N/A',
'DT.:5/1/12',

今、この列から日付列にデータをフォーマットで挿入したいのですdd/mm/yyyyが、常にエラーが発生するため、それを行うことはできません

文字列から日時を変換する際に変換に失敗しました

上記で定義されたすべての指定された値でこの列を日付列に変換する方法を誰かが知っている場合は助けてください

4

2 に答える 2

1

nvarchar列をに変換するには、T-SQLDATETIMEの関数を使用する必要があります。CONVERT

この関数は、一連の「スタイル」をサポートします。これらはすべて、MSDNで非常によく文書化されています

ソース文字列がこれらの定義されたスタイルの1つと一致する場合は、適切な文字列を使用して文字列からCONVERTを取得できDATETIMEます。ただし、T-SQLには、どの変換スタイルが文字列に一致するかを認識する「魔法」はありません。これは完全にあなた次第です。

ここでこのクエリを使用すると、CONVERTT-SQLのすべてのスタイルを一覧表示できます。

DECLARE @Today DATETIME = GETDATE()

SELECT
    Default_100 = CONVERT(VARCHAR(50), @Today, 100),
    US_101 = CONVERT(VARCHAR(50), @Today, 101),
    ANSI_102 = CONVERT(VARCHAR(50), @Today, 102),
    BritishFrench_103 = CONVERT(VARCHAR(50), @Today, 103),
    Germany_104 = CONVERT(VARCHAR(50), @Today, 104),
    Italian_105 = CONVERT(VARCHAR(50), @Today, 105),
    Style106 = CONVERT(VARCHAR(50), @Today, 106),
    Style107 = CONVERT(VARCHAR(50), @Today, 107),
    Style108 = CONVERT(VARCHAR(50), @Today, 108),
    Default_with_ms_109 = CONVERT(VARCHAR(50), @Today, 109),
    USA_110 = CONVERT(VARCHAR(50), @Today, 110),
    Japan_111 = CONVERT(VARCHAR(50), @Today, 111),
    ISO_112 = CONVERT(VARCHAR(50), @Today, 112),
    Europe_default_with_ms_113 = CONVERT(VARCHAR(50), @Today, 113),
    Style114 = CONVERT(VARCHAR(50), @Today, 114),
    ODBC_canonical_120 = CONVERT(VARCHAR(50), @Today, 120),
    ODBC_canonical_with_ms_121 = CONVERT(VARCHAR(50), @Today, 121),
    ISO_8601_126 = CONVERT(VARCHAR(50), @Today, 126),
    ISO_8601_with_timezone_Z_127 = CONVERT(VARCHAR(50), @Today, 127),
    Hijri_130 = CONVERT(VARCHAR(50), @Today, 130),
    Hijri_131 = CONVERT(VARCHAR(50), @Today, 131)

ソース文字列が事前定義されたスタイルのいずれとも一致しない場合-運が悪いため、文字列を有効なに変換するには、さらに多くの文字列解析とT-SQLコードが必要になりますDATETIME

文字列がスタイルの1つと一致する場合は、次のように変換できます。

DECLARE @Date DATETIME
SET @Date = CONVERT(DATETIME, '30.04.2012', 104)
于 2012-06-19T07:55:56.870 に答える
0

最善の方法は、文字列を受け取り、あいまいでない日付文字列 (yyyy-mm-dd) に変換する関数を作成することです。これは、日時に変換できます。さまざまな形式を日付形式に変換する魔法の方法が登場しました。

于 2012-06-19T07:48:21.873 に答える