Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Проблем с SQL Convert Nvarchar(255) в DateTime

опитайте да използвате

CONVERT(datetime,OldDate ,103)

"103" казва на конвертора, че форматът е dd/mm/yyyy

РЕДАКТИРАНЕ

ето добър лайк с много примери:http://www.sqlusa.com/bestpractices/datetimeconversion /

Изглежда, че имате данни за м/д/г, както и за д/м/г, това е най-доброто, което можете да направите:

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)

Използвах „1/1/1900“, защото имате NewDate като 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. SQL не може да вмъкне изрична стойност за колона за идентичност в таблица „Таблица“, когато IDENTITY_INSERT е зададено на OFF

  2. Какви ресурси съществуват за настройка на производителността на базата данни?

  3. В SQL Server, как да генерирам израз CREATE TABLE за дадена таблица?

  4. Досадно SQL изключение, вероятно поради грешен код

  5. Тези две заявки еднакви ли са - GROUP BY срещу DISTINCT?