【问题标题】:How to convert Datetime to String then String to Datetime如何将日期时间转换为字符串,然后将字符串转换为日期时间
【发布时间】:2019-10-28 09:14:07
【问题描述】:

这是行。

DECLARE @Duration DATETIME = '2019-01-12'
DECLARE @DateFrom DATETIME = CONVERT(DATETIME, DATEADD(dd, -90, CONVERT(VARCHAR(10), @Duration)))
SELECT @DateFrom

这是错误信息

导致将 varchar 数据类型转换为 datetime 数据类型 在一个超出范围的值。

sql 结果为 NULL,但有 1 行受到影响。

【问题讨论】:

  • 预期输出?
  • 根据经验,您最不想对日期执行的操作是将它们转换为字符串或从字符串转换。
  • @ArvinJohnSalandanan 您在 Delphi 中使用此查询,能否正确更新您的问题?
  • 你反复说你在Delphi中实现的时候有问题。然而,您还没有展示您是如何尝试在 Delphi 中实现它的!因此,请展示您尝试过的完整 Delphi 程序代码(包括变量声明),并指出触发错误的行,以及错误的确切含义。正如其他人已经说过的那样,您不需要,也不应该将日期和时间转换为字符串以修改日期。

标签: sql sql-server delphi


【解决方案1】:

停止使用CONVERT(),你不需要它!

DATEADD() 可以按原样接收DATETIME 变量并返回DATETIME

DECLARE @Duration DATETIME = '2019-01-12'
DECLARE @DateFrom DATETIME = DATEADD(dd, -90, @Duration)
SELECT @DateFrom

它也可以接受一个日期/时间字符串文字并返回一个DATETIME

DECLARE @DateFrom DATETIME = DATEADD(dd, -90, '2019-01-12')
SELECT @DateFrom

【讨论】:

    【解决方案2】:

    使用DATEADD 函数,您的查询将是这样的,具体取决于您在问题中提供的内容:

    DECLARE @Date datetime2 = '2011-09-23 15:48:39.2370000'
    
    SELECT DATEADD(day,-90,@Date)
    

    【讨论】:

    • 嗨。此行在 SQL 中完美运行。但是当我将查询放在 Delphi 上时,sql 语句不起作用。 DECLARE @DateFrom DATETIME = CONVERT(DATETIME, DATEADD(dd, -90, CONVERT(VARCHAR(10), '2019-01-12')))
    【解决方案3】:
    DECLARE @DateVariable DATETIME
    SET @DateVariable = '2019-01-12'
    DECLARE @DateFrom DATETIME = CONVERT(DATETIME, DATEADD(dd, -90, CONVERT(VARCHAR(10), @DateVariable,103)))
    SELECT @DateFrom
    

    我在这里找到了答案。问题在于时区设置。以其他格式指定,例如 mm/dd/yyyy(通常有效)。

    SQL - The conversion of a varchar data type to a datetime data type resulted in an out-of-range value

    【讨论】:

    • 否 - 问题是您选择了错误的路径并为此逻辑转换为字符串。根本不需要转换为字符串——当然也不需要两次。根据提供的代码,使用日期时间变量也不合适。您正在使用日期,并且在日单位级别上操作它们 - 时间不会改变,并且根本不会进入您的计算。只需删除 convert 的使用 - 两者。
    猜你喜欢
    • 2015-09-17
    • 2015-04-27
    • 1970-01-01
    • 2022-08-18
    • 2017-08-31
    相关资源
    最近更新 更多