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

SQL Nvarchar(255) を DateTime に変換する問題

    使ってみてください

    CONVERT(datetime,OldDate ,103)
    

    「103」は、形式が dd/mm/yyyy であることをコンバーターに伝えます

    編集

    ここに多くの例が含まれています。 /

    あなたは m/d/y と d/m/y データを持っているようです。これはあなたができる最善のことです:

    DECLARE @Table1 table (PK int, OldDate nvarchar(255) null)
    DECLARE @Table2 table (PK int, NewDate datetime not null)
    INSERT @Table1 VALUES (1,'26/07/03')
    INSERT @Table1 VALUES (2,null)
    INSERT @Table1 VALUES (3,null)
    INSERT @Table1 VALUES (4,'23/07/2003')
    INSERT @Table1 VALUES (5,'7/26/2003')
    INSERT @Table1 VALUES (6,null)
    INSERT @Table1 VALUES (7,'28/07/03')
    
    SET DATEFORMAT dmy
    
    INSERT INTO @Table2
            (PK, NewDate)
        SELECT
            PK,
            CASE 
                WHEN ISDATE(OldDate)=1 THEN OldDate
                ELSE '1/1/1900'
            END
            FROM @Table1
    
    SET DATEFORMAT mdy
    
    UPDATE t2
        SET NewDate=OldDate
        FROM @Table2           t2
            INNER JOIN @Table1 t1 ON t2.PK=t1.PK
        WHERE t2.NewDate='1/1/1900' AND ISDATE(OldDate)=1 
    
    SELECT * FROM @Table2
    

    出力:

    PK          NewDate
    ----------- -----------------------
    1           2003-07-26 00:00:00.000
    2           1900-01-01 00:00:00.000
    3           1900-01-01 00:00:00.000
    4           2003-07-23 00:00:00.000
    5           2003-07-26 00:00:00.000
    6           1900-01-01 00:00:00.000
    7           2003-07-28 00:00:00.000
    
    (7 row(s) affected)
    

    NewDate が NOT NULL であるため、'1/1/1900' を使用しました。



    1. MySQL-複雑な計算のUPDATEクエリパフォーマンスを改善

    2. php mysql Group Byは、最初のレコードではなく、最新のレコードを取得します

    3. 別のテーブルからの SQL Server 計算列の選択

    4. SQLServerのテーブルとインデックスのサイズ