Search code examples
sqlsql-serverdatesql-insertcreate-table

Date Function in Insert gives an error. How can I format my date to return the insert values?


create table Arbeiten
(
    m_nr int not null,
    pr_nr char(4) not null,
    aufgabe char(20) null,
    einst_date DATE null,
    constraint pk_arbeiten_projekt 
        primary key(m_nr, pr_nr),
    constraint fk_mitarbeiter 
        foreign key(m_nr) references Mitarbeiter(m_nr),
    constraint fk_projekt 
        foreign key(pr_nr) references Projekt(pr_nr)
)

insert into Arbeiten (m_nr, pr_nr, aufgabe, einst_date)
values (10102, 'p1', 'Projektleiter', '01-oct-2018'),
       (10102, 'p3', 'Gruppenleiter', '01-jan-2019'),
       (25348, 'p2', 'Sachbearbeiter', '15-feb-2018'),
       (18316, 'p2', 'NULL', '01-juni-2019'),
       (29346, 'p2', 'NULL', '15-dec-2017'),
       (2581, 'p3', 'Projektleiter', '15-oct-2019'),
       (9031, 'p1', 'Gruppenleiter', '15-apr-2019'),
       (28559, 'p1', 'NULL', '15-apr-2019'),
       (28559, 'p2', 'Sachbearbeiter', '01-feb-2018'),
       (9031, 'p3', 'Sachbearbeiter', '15-nov-2018'),
       (29346, 'p1', 'Sachbearbeiter', '01-apr-2019')

I get this error:

Conversion failed when converting date and/or time from character string.

What should I change here to display the date?


Solution

  • This line is the problem:

    (18316,'p2','NULL','01-juni-2019'),
    -----------------------^^^^ what month is "juni"?
    

    This works:

    (18316,'p2','NULL','01-jun-2019'),
    

    But really, you should be using unambiguous formats that don't contain language-specific words, like 20190601. Otherwise this can still fail, e.g.

    SET LANGUAGE German;
    INSERT ... VALUES (18316,'p2','NULL','01-jun-2019')
    

    Msg 241 Level 16 State 1
    Fehler beim Konvertieren einer Zeichenfolge in ein Datum und/oder eine Uhrzeit.

    See Dating Responsibly.