SQL Server:将日期时间插入表中

Posted

技术标签:

【中文标题】SQL Server:将日期时间插入表中【英文标题】:SQL Server : inserting datetime into table 【发布时间】:2017-05-31 16:47:04 【问题描述】:

我有一张桌子:

CREATE TABLE [dbo].[667788]
(
    a NVARCHAR(100),
    b NVARCHAR(100),
    c NVARCHAR(100),
    d NVARCHAR(100),
    e NVARCHAR(100),
    f NVARCHAR(100),
    t1 DATETIME,
    t2 DATETIME
)

我正在尝试插入以下值:

('x','y','m','2','a','c','16/11/2012 00:00:00','06/08/2013 00:00:00'),

但我得到一个错误:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

有人知道我提供的格式有什么办法吗?

【问题讨论】:

使用标准日期/时间格式'2012-11-16 00:00:00'。 ***.com/questions/20838344/… 始终使用ISO8601 符号格式化您的日期时间以避免歧义。 SQL - The conversion of a varchar data type to a datetime data type resulted in an out-of-range value的可能重复 如果您使用的是 SQL Server 2008 或更新版本,我建议您在表中使用 DATETIME2(n) 而不是普通的旧式笨重 DATETIME 【参考方案1】:

SQL Server 中唯一真正安全的日期/时间文本格式(至少对于 datetimesmalldatetime 而言)是:YYYYMMDDYYYY-MM-DDThh:mm:ss[.nnn]

Bad habits to kick : mis-handling date / range queries - Aaron Bertrand

不过,您可能只需在插入之前设置 set dateformat dmy 就可以逃脱。

set dateformat

使用set dateformat dmy;:http://rextester.com/NUQM21818的rextester演示

【讨论】:

【参考方案2】:

与 Cenderze 的回答类似,您可以通过使用 select 语句插入值来一次性执行插入,该语句正在对麻烦的值执行转换:

CREATE TABLE [dbo].[WRBIEL_MasterBindersv2]
(
    a NVARCHAR(100),
    b NVARCHAR(100),
    c NVARCHAR(100),
    d NVARCHAR(100),
    e NVARCHAR(100),
    f NVARCHAR(100),
    t1 DATETIME,
    t2 DATETIME
)

INSERT INTO [dbo].[WRBIEL_MasterBindersv2]
SELECT
'x','y','m','2','a','c',CONVERT(datetime, '16/11/2012 00:00:00', 103),CONVERT(datetime,'06/08/2013 00:00:00' , 103)

【讨论】:

【参考方案3】:

不知道这是否可行,目前无法验证,但您可以尝试使用

 select 
 cast (a as nvarchar(100)) as a,
  ...
Convert(datetime, getdate(),103)  as t1
 into yournewtable
 From youroldtable
 Where 1=2

如果您将列转换为所需的数据类型并使用 Insert ... Into .. 从并添加 where 1=2 创建一个新表,您将使用所需的数据类型和列名创建一个表。

从我收集到的使用 convert 和参数 103 应该可以得到你想要的数据类型结果。您也可以尝试将 convert 与 varchar 一起使用,而不是 datetype。

【讨论】:

以上是关于SQL Server:将日期时间插入表中的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:结合日期列和时间列,插入到日期时间列

sql server 怎样将字符串转化为时间格式

如何查找在 SQL Server 表中插入或更新行的时间

C# 中的日期时间与 SQL Server 中的 SQL 和 GETDATE()

SQL Server 2008 中的 While 循环遍历日期范围,然后插入

如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]