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 中唯一真正安全的日期/时间文本格式(至少对于 datetime
和 smalldatetime
而言)是:YYYYMMDD
和 YYYY-MM-DDThh:mm:ss[.nnn]
不过,您可能只需在插入之前设置 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:将日期时间插入表中的主要内容,如果未能解决你的问题,请参考以下文章
C# 中的日期时间与 SQL Server 中的 SQL 和 GETDATE()