Sql-query om datetime in SQL Server in te voegen

Ik wil een datetimewaarde invoegen in een tabel (SQL Server) met behulp van de onderstaande sql-query

insert into table1(approvaldate)values(18-06-12 10:34:09 AM);

Maar ik krijg deze foutmelding. Incorrect syntax near '10'.

Ik heb het geprobeerd met de aanhalingstekens

insert into table1(approvaldate)values('18-06-12 10:34:09 AM');

Ik krijg deze foutmelding Cannot convert varchar to datetime

Graag helpen!
Bedankt.


Antwoord 1, autoriteit 100%

U zult de YYYYMMDD willen gebruiken voor eenduidige datumbepaling in SQL Server.

insert into table1(approvaldate)values('20120618 10:34:09 AM');

Als je getrouwd bent met het dd-mm-yy hh:mm:ss xmformaat, moet je CONVERT gebruiken met de specifieke stijl.

insert into table1 (approvaldate)
       values (convert(datetime,'18-06-12 10:34:09 PM',5));

5hier is de stijl voor Italiaanse dates. Nou, niet alleen Italianen, maar dat is de cultuur waaraan het wordt toegeschreven in Online Boeken.


Antwoord 2, autoriteit 13%

Een meer taal-onafhankelijke keuze voor string-literalen is de internationale standaard ISO 8601 formaat “yyyy -Mm-ddthh: mm: SS “. Ik heb de SQL-query hieronder gebruikt om het formaat te testen, en het werkt inderdaad in alle SQL-talen in Sys.Syslanguages ​​:

declare @sql nvarchar(4000)
declare @LangID smallint
declare @Alias sysname
declare @MaxLangID smallint
select @MaxLangID = max(langid) from sys.syslanguages
set @LangID = 0
while @LangID <= @MaxLangID
begin
    select @Alias = alias
    from sys.syslanguages
    where langid = @LangID
    if @Alias is not null
    begin
        begin try
            set @sql = N'declare @TestLang table (langdate datetime)
    set language ''' + @alias + N''';
    insert into @TestLang (langdate)
    values (''2012-06-18T10:34:09'')'
            print 'Testing ' + @Alias
            exec sp_executesql @sql
        end try
        begin catch
            print 'Error in language ' + @Alias
            print ERROR_MESSAGE()
        end catch
    end
    select @LangID = min(langid)
    from sys.syslanguages
    where langid > @LangID
end

Volgens de String Letterlijke Datum en tijdformaten sectie in Microsoft-technet, het standaard ANSI-standaard SQL-datumformaat “YYYY-MM-DD HH: MM: SS” wordt verondersteld “meertalig” te zijn. Met behulp van dezelfde query werkt het ANSI-formaat echter niet in alle SQL-talen.

Bijvoorbeeld in Deens, u zult veel fouten zoals het volgende:

FOUT IN TAAL DEENS
De conversie van een varchar-gegevenstype naar een datetime-gegevenstype resulteerde in een waarde die buiten het bereik ligt.

Als u een query in C# wilt maken om op SQL Server te draaien, en u moet een datum doorgeven in de ISO 8601-indeling, gebruik dan de Sorteerbare “s”-formaatspecificatie:

string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);

Antwoord 3, autoriteit 9%

Managementstudio maakt scripts zoals:

insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))

Antwoord 4, autoriteit 4%

je moet het toevoegen zoals

insert into table1(date1) values('12-mar-2013');

Antwoord 5

Als u waarden opslaat via een programmeertaal

Hier is een voorbeeld in C#

Om de datum op te slaan, moet u deze eerst converteren en vervolgens opslaan

insert table1 (foodate)
   values (FooDate.ToString("MM/dd/yyyy"));

FooDate is een datetime variabele die je datum in jouw formaat bevat.


Antwoord 6

Converteren is niet nodig. Vermeld het gewoon als een geciteerde datum in ISO 8601-formaat.
Vind ik leuk:

select * from table1 where somedate between '2000/01/01' and '2099/12/31'

Het scheidingsteken moet een /zijn en moet tussen enkele 'aanhalingstekens staan.


Antwoord 7

Ik ontmoet in een meer generiek probleem: het krijgen van verschillende (en niet noodzakelijk bekend) datetime-indelingen en plaats ze in de kolom DATETIME. Ik heb het opgelost met deze verklaring, die eindelijk een scalaire functie werd (relevant voor ODBC Canonical, American, ANSI en British \ Franch Date-stijl – kan worden uitgebreid):

insert into <tableName>(<dateTime column>) values(coalesce 
(TRY_CONVERT(datetime, <DateString, 121), TRY_CONVERT(datetime, <DateString>, 
101), TRY_CONVERT(datetime, <DateString>, 102), TRY_CONVERT(datetime, 
<DateString>, 103))) 

Other episodes