【问题标题】:SQL Server : inserting datetime into tableSQL Server:将日期时间插入表中
【发布时间】: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 数据类型导致值超出范围

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

【问题讨论】:

标签: sql sql-server


【解决方案1】:

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


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

使用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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        • 2013-05-19
        相关资源
        最近更新 更多