Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Problem konwersji SQL Nvarchar(255) na DateTime

spróbuj użyć

CONVERT(datetime,OldDate ,103)

"103" mówi konwerterowi, że format to dd/mm/yyyy

EDYTUJ

Oto dobry przykład z wieloma przykładami:http://www.sqlusa.com/bestpractices/datetimeconversion /

Wygląda na to, że masz dane m/d/r oraz d/m/r, to jest najlepsze, co możesz zrobić:

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

WYJŚCIE:

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)

Użyłem „1/1/1900”, ponieważ NewDate ma wartość NOT NULL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapisz tablicę bajtów na serwerze sql

  2. Zapobiegaj wstrzykiwaniu SQL w klauzuli ORDER BY

  3. Używanie wyrażeń CASE w SQL Server

  4. Naruszenie błędu ograniczenia PRIMARY KEY SQL

  5. SQL Grant wykonuje się na wielu obiektach