【问题标题】:Conversion failed when converting date from character string in sql server从sql server中的字符串转换日期时转换失败
【发布时间】:2021-12-06 21:07:03
【问题描述】:
Declare @count varchar(max)
Select @count=configurable from configurableitems where project='auto'
Delete from detaillog where createdtime<convert(date,getdate()-@count)

我收到错误:

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

【问题讨论】:

  • 以上真的没有任何意义。您将@Count 声明为varchar(MAX),并尝试从GETDATE() 中减去所述值。日期和字符串是完全不同的值。从 datetime 值中减去最长 20 亿 个字符的 varchar 是没有意义的。
  • 之前我们使用如下查询:Delete from detaillog where createdtime
  • 该查询在您的问题中,但是,这并不能解释为什么您要尝试从 datetime 中获取高达 2G 字节的字符串...你是什么真的 i> 试图在这里实现。日期不是字符串,它们存储为二进制值。从它们中添加和减去是没有意义的。相反,如果您想从日期和时间值中添加或减去间隔,请使用DATEADD

标签: sql sql-server


【解决方案1】:

正如我在 cmets 中提到的,以上没有多大意义。从 datetime 中减去多达 20 亿个字符的 varchar 值是荒谬的。像@Count 这样的名称也意味着一个数值。也许@count 应该是int

接下来,对日期进行加减运算没有多大意义。例如,2020-12-06T13:05:00:123 - 3 是什么?减 3 什么?尽管此语法适用于较旧的 (small)datetime 数据类型,但不适用于新的日期和时间数据类型。如果您想从日期和时间值中添加/减去间隔,请使用DATEADD

也许你想要的是这样的:

DECLARE @count int;

SELECT @count = configurable
FROM configurableitems
WHERE project = 'auto';

DELETE FROM detaillog
WHERE createdtime < CONVERT(date, DATEADD(DAY,-@Count,GETDATE());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多