【问题标题】:Load the date separated by '/' with the Datetime datatype in sql server在 sql server 中使用 Datetime 数据类型加载以“/”分隔的日期
【发布时间】:2017-12-15 13:10:47
【问题描述】:
INSERT INTO PUZ_DATE_FORMAT 
    SELECT FORMAT(GETDATE(),'d', 'it-IT') AS ItalianDate

我收到此错误:

消息 242,第 16 级,状态 3,第 1 行
将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。

我的表只包含 datetime 数据类型的单列,我编写的格式语句将给出类似 15/12/2017 的输出。

但是当我尝试在表格中插入一行时,它不允许我这样做。它只允许 dd-mm-yyyy 格式 - 不允许 dd/mm/yyyy。为什么?

【问题讨论】:

  • 您为什么要尝试转换? GETDATE() 返回一个日期时间,您可以毫不费力地插入它。日期时间没有格式,当日期时间值显示在屏幕上或以其他方式打印时应用格式。
  • 补充@HoneyBadger 所说的,日期时间以二进制结构存储在数据库中。这些值的显示格式完全由演示应用程序控制。

标签: sql-server date datetime types date-format


【解决方案1】:

基本上,您要做的是将字符串值插入日期时间字段。这样做时,SQL Server 尝试在插入期间将字符串强制转换为日期时间。如果您的字符串是通用格式(yyyy-MM-dd),它可以成功解析它而不会出现任何问题。否则,字符串必须采用日期时间格式作为服务器的文化。

我猜您服务器的文化是 en-US,其日期时间格式为“MM/dd/yyyy”。对于您的日期(2017 年 12 月 15 日),服务器认为 15 是月份,12 是日期,依此类推。这显然正在下降。

如果您在当月 12 日之前尝试过这个,它可以成功转换,但值不正确。

此外,您没有做正确的事情,将日期时间转换为字符串,然后尝试插入日期时间字段。尝试将原始日期时间存储在数据库中,并在 UI 中显示时进行相应的格式化。

干杯,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多