Ik wil een datetime
waarde 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 xm
formaat, moet je CONVERT gebruiken met de specifieke stijl.
insert into table1 (approvaldate)
values (convert(datetime,'18-06-12 10:34:09 PM',5));
5
hier 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)))