【问题标题】:Inserting a date in a column of date datatype in SQL Server在 SQL Server 中的日期数据类型列中插入日期
【发布时间】:2018-03-10 22:26:53
【问题描述】:

如何将格式为 dd-mm-yyyy 的日期插入到数据类型为 Date 的列中?

尝试了以下但显示错误

INSERT INTO Profiles (first_name, last_name, email, phone, 
                      [city(hometown)], created_at, gender, 
                      referral_code,marital_status) 
VALUES ('anusha', 'pariti', 'anusha.pariti@gmail.com', '8105987404', 
        'Bangalore', '16-04-2015', 'F', '7L5FZW', 'Y'),
       ('Ashish', 'Singh', 'ashish.singh@gmail.com', '9876890463', 
        'Bangalore','23-05-2015', 'M', 'KF34MF', 'Y')

错误:

从字符串转换日期和/或时间时转换失败。

INSERT INTO Profiles (first_name, last_name, email, phone, 
                      [city(hometown)],created_at, gender, 
                      referral_code, marital_status) 
VALUES ('anusha', 'pariti', 'anusha.pariti@gmail.com', '8105987404', 
        'Bangalore', CAST('16-04-2015' AS DATE), 'F', '7L5FZW', 'Y'),
       ('Ashish', 'Singh', 'ashish.singh@gmail.com', '9876890463', 
        'Bangalore', CAST('23-05-2015' AS DATE), 'M', 'KF34MF', 'Y')

错误:

从字符串转换日期和/或时间时转换失败。

INSERT INTO Profiles (first_name, last_name, email, phone, 
                      [city(hometown)], created_at, gender,  
                      referral_code, marital_status) 
VALUES ('anusha', 'pariti', 'anusha.pariti@gmail.com', '8105987404', 
        'Bangalore', CONVERT(DATE, '16-04-2015'), 'F', '7L5FZW', 'Y'),
       ('Ashish', 'Singh', 'ashish.singh@gmail.com', '9876890463', 
        'Bangalore', CONVERT(DATE, '23-05-2015'), 'M', 'KF34MF', 'Y')

错误:

从字符串转换日期和/或时间时转换失败。

【问题讨论】:

    标签: sql sql-server sql-insert string-to-datetime


    【解决方案1】:

    尝试使用可接受的格式插入日期,例如使用20150416 而不是'16-04-2015:

    INSERT INTO Profiles (first_name, last_name, email, phone, [city(hometown)],
        created_at, gender, referral_code,marital_status)
    VALUES
        ('anusha', 'pariti', 'anusha.pariti@gmail.com', '8105987404', 'Bangalore',
         '20150416', 'F', '7L5FZW', 'Y'),
        ('Ashish', 'Singh', 'ashish.singh@gmail.com', '9876890463', 'Bangalore',
         '20150523', 'M', 'KF34MF', 'Y');
    

    这将允许您将数据作为日期存储在created_at 列中。这绝对是存储日期信息的方式。如果您以后想以原始方式格式化created_at 列,可以使用CONVERT,例如

    SELECT
        CONVERT(varchar, created_at, 105) AS created_at
    FROM Profiles;
    

    【讨论】:

    • 是的,可接受的格式有效。但是如果我想要指定的格式,即 16-04-2015。有没有办法以这种格式插入它?
    • 我不知道。无论如何,您为什么要这样做?格式错误,您以后必须进行详细的转换。
    • @Biswa 您无法根据需要在日期时间字段中插入日期('16-04-2015'),但稍后您可以按照所需的格式阅读。
    • 好的。这就是我想知道的是否有可能。谢谢
    • YYYY-MM-DD 的日期文字在 MSSQL 中可能会失败,请参阅 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/… 虽然它可能是非标准的且不直观,但 YYYYMMDD 的日期文字始终可以安全使用(在 MSSQL 中!)。
    【解决方案2】:

    你可以试试这个。

    dd-mm-yyyy是意大利语格式,样式代码是105,所以你应该使用这个代码来转换它。

    INSERT INTO Profiles (first_name, last_name, email, phone, 
                          [city(hometown)], created_at, gender,  
                          referral_code, marital_status) 
    VALUES ('anusha', 'pariti', 'anusha.pariti@gmail.com', '8105987404', 
            'Bangalore', CONVERT(DATE, '16-04-2015',105), 'F', '7L5FZW', 'Y'),
           ('Ashish', 'Singh', 'ashish.singh@gmail.com', '9876890463', 
            'Bangalore', CONVERT(DATE, '23-05-2015',105), 'M', 'KF34MF', 'Y') 
    

    【讨论】:

      【解决方案3】:

      SQL Server 中最安全的日期文字是 YYYYMMDD

      例如 插入...值('20170523',...

      您似乎习惯了 DD-MM-YYYY,如果您想使用该序列,则需要使用带有样式编号的 convert。

      转换(日期,'23-05-2017',120)

      【讨论】:

      • 建议将日期作为文本插入是一个不好的建议,尽管您的转换逻辑可能有效。
      • 然后您尝试插入无效的日期值,例如 2 月 30 日。可能会遇到错误消息,因为字符串不会成为日期。
      • 顺便说一句,如果您不包含第三个参数,则在使用 CONVERT(date,'2015-05-23',120) 时必须包含 stule 编号,您依赖的默认设置对您没有帮助.也不是第一个日期存储为数字,而不是人类可读的格式。格式在输入时很重要,可以更改以适应输出。
      • @Tim_Biegeleisen 在 MSSQL 中,'YYYYMMDD' 实际上比 'YYYY-MM-DD' 更安全,因为可以设置一个(尽管非常罕见)默认值,它将日期解释为 'YYYY-DD -MM'。因此,建议使用 'YYYY-MM-DD' 文字,而 'YYYYMMDD' 总是按该顺序解释。我个人讨厌它,只是碰巧就是这样。
      【解决方案4】:

      你试过YYYY-MM-DD格式吗? SQL 中的数据格式为 YYYY-MM-DD。

      【讨论】:

        【解决方案5】:

        在 SQL server 2012+ 中可以使用

        Select try_convert(date, '16-04-2015', 105)
        

        否则你必须正确格式化字符串

        【讨论】:

        • 这可能有效,但更简单的解决方案是仅对日期字符串使用 ISO 格式。
        猜你喜欢
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多