首页 > 解决方案 > 将 getdate()-1 插入到日期类型的表字段中会引发错误:从字符串转换日期和/或时间时转换失败

问题描述

这是一个奇怪的问题,因为我已经多次运行这个简单的 t-sql 但现在它正在抛出错误。

我正在使用 getdate()-1 作为日期的类型进行昨天日期的简单插入。现在它给出了无法转换字符串的错误。如何正确地将昨天的日期显示为日期格式以插入此表:

完整代码:

select VariantID, OH_QTY, cast( GETDATE()-1 as date) WeekEndDate, 
case when COMPAREATPRICE IS NULL THEN 'FP' 
WHEN Price<CompareAtPrice then 'MD' else 'FP' end as PRICE_TYPE
from D_PRODUCTS
where OH_QTY is not null and OH_QTY <> 0

表结构:

    [VariantID] [nvarchar](50) NOT NULL,
    [OH_QTY] [int] NULL,
    [PRICE_TYPE] [nvarchar](2) NULL,
    [WeekEndDate] [date] NULL
) ON [PRIMARY]
GO

标签: sqldate

解决方案


这不能回答您的问题,如果我不得不推测的话,这是由于insert您没有列出列。

但是,您可以利用NULL值在大多数比较中失败的事实来简化这段代码:

select VariantID, OH_QTY,
       dateadd(day, -1, cast(getdate() as date)) as WeekEndDate, 
       (case when Price < CompareAtPrice then 'MD' else 'FP' end) as price_type
from D_PRODUCTS
where OH_QTY <> 0;

请注意,我更喜欢显式dateadd()to getdate() - 1,尽管您的版本在技术上是好的。

您可以单独运行此查询,并且应该会看到它有效。唯一可能的类型转换问题是一些字符串PriceCompareAtPrice或者OH_QTY是字符串——但是将价格存储为字符串会很愚蠢。

如果这可以独立工作,那么问题出在insert,您没有包含在问题中。


推荐阅读