SQL查询在SQL Server中插入datetime

She*_*hee 123 sql datetime sql-server-2008

我想datetime使用下面的SQL查询将值插入表(SQL Server)

insert into table1(approvaldate)values(18-06-12 10:34:09 AM);
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误信息. Incorrect syntax near '10'.

我用引号试了一下

insert into table1(approvaldate)values('18-06-12 10:34:09 AM');
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息 Cannot convert varchar to datetime

请帮忙!谢谢.

Ric*_*iwi 207

您将需要使用YYYYMMDD在SQL Server中进行明确的日期确定.

insert into table1(approvaldate)values('20120618 10:34:09 AM');
Run Code Online (Sandbox Code Playgroud)

如果您已与dd-mm-yy hh:mm:ss xm格式结合,则需要使用具有特定样式的CONVERT.

insert table1 (approvaldate)
       values (convert(datetime,'18-06-12 10:34:09 PM',5));
Run Code Online (Sandbox Code Playgroud)

5这是意大利约会的风格.好吧,不仅仅是意大利人,而是图书在线的文化.

  • 我的立场得到了纠正 - 如果你正在使用`YYYYMMDD HH:MM:SS`(24小时格式 - 世界格式,除了美国之外的任何人都使用这个,而不仅仅是军队....)**没有**破折号 - 即使对于"英国"语言也是如此.如果您使用`YYYY-MM-DD HH:MM:SS`但是它失败了 - 在这种情况下(使用短划线),您需要**以`T`字面分隔日期和时间. (4认同)

Pau*_*ams 26

字符串文字的更多与语言无关的选择是国际标准ISO 8601格式"YYYY-MM-DDThh:mm:ss".我使用下面的SQL查询来测试格式,它确实适用于sys.syslanguages中的所有SQL语言:

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
Run Code Online (Sandbox Code Playgroud)

根据Microsoft TechNet中的字符串文字日期和时间格式部分,标准ANSI标准SQL日期格式"YYYY-MM-DD hh:mm:ss"应该是"多语言".但是,使用相同的查询,ANSI格式不适用于所有SQL语言.

例如,在丹麦语中,您会遇到如下错误:

语言错误丹麦语将varchar数据类型转换为日期时间数据类型会导致超出范围的值.

如果要在C#中构建查询以在SQL Server上运行,并且需要传递ISO 8601格式的日期,请使用Sortable"s"格式说明符:

string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

  • 似乎您只能将“YYYYMMDD”用于日期,以及“YYYY-MM-DDThh:mm:ss”(带有破折号,是的,日期和时间部分之间有一个“T”!)或“YYYYMMDD HH:MM:SS” `(没有破折号,没有分隔文字)真正独立于语言...... (3认同)

小智 16

Management studio创建脚本,如:

insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))
Run Code Online (Sandbox Code Playgroud)


小智 8

你需要添加它

insert into table1(date1) values('12-mar-2013');
Run Code Online (Sandbox Code Playgroud)


Joh*_*ica 5

无需使用转换。只需将其列为 ISO 8601 格式的引用日期即可。
就像这样:

select * from table1 where somedate between '2000/01/01' and '2099/12/31'
Run Code Online (Sandbox Code Playgroud)

分隔符必须是 a/并且需要用单'引号引起来。