sql >> Database >  >> RDS >> Sqlserver

SQL Convert Nvarchar(255) naar DateTime probleem

probeer het te gebruiken

CONVERT(datetime,OldDate ,103)

de "103" vertelt de converter dat het formaat dd/mm/yyyy is

BEWERKEN

hier is een goede zoals met veel voorbeelden:http://www.sqlusa.com/bestpractices/datetimeconversion /

U lijkt zowel m/d/y- als d/m/y-gegevens te hebben, dit is ongeveer het beste wat u kunt doen:

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

UITGANG:

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)

Ik heb '1/1/1900' gebruikt omdat je NewDate als NOT NULL hebt.



  1. mysql tijdstempel kolom

  2. Toon bericht in opgeslagen procedure

  3. Tabeltype in Oracle Stored Procedure Voorbeeld

  4. Record geretourneerd door functie heeft kolommen aaneengeschakeld