sql - 将 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
解决方案
这不能回答您的问题,如果我不得不推测的话,这是由于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
,尽管您的版本在技术上是好的。
您可以单独运行此查询,并且应该会看到它有效。唯一可能的类型转换问题是一些字符串Price
,CompareAtPrice
或者OH_QTY
是字符串——但是将价格存储为字符串会很愚蠢。
如果这可以独立工作,那么问题出在insert
,您没有包含在问题中。
推荐阅读
- spring-boot - 使用 MockMvc 自定义 Spring 安全过滤器测试总是返回 404
- javascript - 双引号和 JSON.stringify
- azure-devops - 限制用户从 Azure DevOps 访问 Board
- spring-boot - 规避 Boostrap-Table 缓慢渲染 100 多行
- c# - Indexer Initializer 的 VB.Net 等效项
- node.js - 如何使用环境变量隐藏客户端代码的秘密?
- unity3d - 将 DLL 导入统一时遇到问题
- php - 属于投掷试图获取非对象的属性“jenis_bahan”
- hyperledger-fabric - 我们可以将私有数据收集添加到现有网络中的通道吗
- scala - 没有整个实例的字段的Scala捕获方法