【问题标题】:Out-of-range value when converting dates separated by dots转换以点分隔的日期时超出范围的值
【发布时间】:2020-01-08 11:28:12
【问题描述】:

如何转换以下VARCHAR(50) 数据:

01.01.2020 06:10:15

到日期时间?

【问题讨论】:

  • (1) SQL 没有“对象”。你确定你在谈论数据库吗? (2) 如果是,您使用的是什么数据库?
  • ANSI SQL 的时间戳为YYYY-MM-DD HH:MM:SS
  • 第一个01 指的是什么?月还是日?
  • @SalmanA 有正确的答案,但我建议您不要将类型 DATETIME 用于新工作。 “将时间、日期、日期时间 2 和日期时间偏移数据类型用于新工作。”来源:docs.microsoft.com/en-us/sql/t-sql/data-types/…

标签: sql sql-server tsql datetime


【解决方案1】:

假设日期是 dd.mm.yyyy 格式,您可以使用使用这种精确格式的date and time style #104(德语):

SELECT CONVERT(DATETIME, '13.01.2020 06:10:15')
-- The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

SELECT CONVERT(DATETIME, '13.01.2020 06:10:15', 104)
-- 2020-01-13 06:10:15.000

【讨论】:

  • 我也会使用它。样式 104 是唯一使用“dd.mm.yyyy”格式的样式。也建议停止使用DATETIME,新作品应该使用“时间、日期、日期时间2和日期时间偏移数据类型”:docs.microsoft.com/en-us/sql/t-sql/data-types/…
【解决方案2】:

你可以试试下面的方法:

 SELECT CONVERT(datetime, '2017-08-25')

在单引号下的日期位置,您可以放置​​变量名。

【讨论】:

  • 那个答案是特定于产品的(它不是“SQL”,看起来像 T-SQL)——你怎么知道 user2672844 正在使用哪个 DBMS 产品?
【解决方案3】:

试试下面的代码:

select convert(datetime, '01.01.2020 06:10:15', 104)

Help Link

【讨论】:

  • 我也收到此错误:转换为 DateTime 数据类型导致 DateTime 值超出范围。也许日期中的点是问题
  • 可能是其他日期导致了问题,而不是您发布的问题。
  • 日期时间样式“20”是错误的,应该是“yyyy-mm-dd hh:mi:ss”。检查文档以获取正确的日期样式:docs.microsoft.com/en-us/sql/t-sql/functions/…
  • @AminGolmahalle 很抱歉,但您给出的代码示例是错误的,您不能在 '01.01.2020 06:10:15' 上使用类型 20。
  • @Jarle Bjørnbeth 如果学习了帮助链接。你看到每个数字都可以根据你的结果选择。20 只是样本。
【解决方案4】:

你可以通过这种方式实现

Declare @Str VARCHAR(50) = '01.01.2020 06:10:15'

Select CONVERT(date, REPLACE(@Str, '.', '/'), 103)

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多