sql >> データベース >  >> RDS >> Sqlserver

varchar(ddmmyyyy) を日付形式に変換します

    ddmmyyyy は有効な日付形式ではありません。最初にその文字列を DATE として解析できるものにする必要があります / DATETIME .最も簡単な方法は、単純に SUBSTRING にすることです ピースを mm/dd/yyyy に フォーマット。それは正常に変換されます。しかし、あなたは VARCHAR(8) を持っています .したがって、それを VARCHAR(10) になるように増やす必要があります (あるいは、CHAR(10) だけでも構いません) )、または変更された値を保持するローカル変数を宣言します。

    例:

    DECLARE @Date VARCHAR(8); -- input parameter
    SET @Date = '25032014';
    
    DECLARE @Date2 CHAR(10);
    SET @Date2 = SUBSTRING(@Date, 3, 2)
                 + '/' + SUBSTRING(@Date, 1, 2)
                 + '/' + SUBSTRING(@Date, 5, 4);
    
    SELECT @Date2, CONVERT(DATE, @Date2);
    -- 03/25/2014     2014-03-25
    

    編集: 実は、もう少し簡単な方法を見つけました。この方法で始めましたが、ddmmyyyy では機能しないことに気付きました mmddyyyy とは対照的に . dd/mm/yyyy に適切な日付スタイル番号があったことをなぜか見逃していました .したがって、受信文字列に 2 つのスラッシュを追加して、CONVERT を呼び出すだけです。 動作しますが、103 を使用する場合のみです 「スタイル」として。最初の解決策と同様に、受信パラメータを VARCHAR(10) に変更する必要があります または CHAR(10) VARCHAR(8) の代わりに 、または CHAR(10) になるローカル変数を作成する .

    DECLARE @Date VARCHAR(8); -- input parameter
    SET @Date = '25032014';
    
    DECLARE @Date2 CHAR(10);
    SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/');
    
    SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy
    -- 25/03/2014     2014-03-25
    

    変換の「スタイル」は、CAST and CONVERT の MSDN ページにあります。> .




    1. MySQL正規表現はUnicodeマッチングをサポートしていますか

    2. PostgreSqlデータベースのエンコーディングを変更する

    3. その列に基づいてクエリを作成する方法

    4. テーブルの時間の重複をチェックしていますか?