我正在尝试运行此查询,但查询一直放弃我:
Update StockInvoiceInfo set Quantity = Quantity - 2 where p_id = 5 AND ProductDate = convert(Cast('31-5-2015' as datetime)) ;
运行此代码后,它会返回以下错误:
'31 -5-2015'附近的语法不正确
ProductDate
列的数据类型为Date
。我正在使用Sql Server 2012
。
答案 0 :(得分:3)
您使用过Convert
个函数,但未提供参数。此处也不需要此功能。还要注意日期格式。我已将其更改为标准格式:
Update StockInvoiceInfo set Quantity = Quantity - 2
where p_id = 5 AND ProductDate = Cast('2015-05-31' as datetime)
答案 1 :(得分:0)
使用CAST('5-31-2015' as DATETIME)
答案 2 :(得分:0)
使用上面的更新语句,您开始转换但语法不完整 这里转换语法
Update StockInvoiceInfo
set Quantity = Quantity - 2
where p_id = 5
AND ProductDate = convert(datetime,Cast('31-5-2015' as varchar),103) ;
答案 3 :(得分:0)
如果你要做的就是比较一个Sql Date,那么只需使用main.m
之类的不可知格式,或者更容易阅读'20150531'
。根本不需要演员阵容或转换,即
'2015-05-31'
但是,如果WHERE ... AND ProductDate = '2015-05-31'
不是日期,而是ProductDate
数据类型之一,并且您希望在同一天的任何时间更新,那么我相信您正在寻找某些东西像:
*DATETIME*
然而,由于该条款不太可能是SARGable,因此表现将会很糟糕。你最好只做:
Update StockInvoiceInfo
set Quantity = Quantity - 2
where
p_id = 5
AND CAST(ProductDate AS DATE) = '2015-05-31';
(抵制在两者之间使用的诱惑,或像':23:59:59'那样的黑客攻击,因为会有数据角落的情况会咬你)