sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Konverter Nvarchar(255) til DateTime-problem

prøv at bruge

CONVERT(datetime,OldDate ,103)

"103" fortæller konverteren, at formatet er dd/mm/yyyy

REDIGER

her er et godt like med mange eksempler:http://www.sqlusa.com/bestpractices/datetimeconversion /

Du ser ud til at have m/d/y såvel som d/m/y data, dette er omtrent det bedste du kan gøre:

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

OUTPUT:

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)

Jeg brugte '1/1/1900', fordi du har NewDate som IKKE NULL.



  1. Switchover/Switchback i Slony-I under opgradering af PostgreSQL større versioner 8.4.x/9.3.x

  2. SQL Server-historiktabel - udfyldes via SP eller Trigger?

  3. Postgresql gør null til nul

  4. Er der en måde at oprette en automatisk inkrementerende Guid Primary Key i en Oracle-database?