首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >数据减法误差

数据减法误差
EN

Stack Overflow用户
提问于 2016-05-02 20:49:02
回答 3查看 155关注 0票数 2

我有一个带有几个列的Server表。

其中一列是date,另一列是No of Nights

夜数始终是一个两个字符的varchar列,其值如1N、2N、3N等,取决于最多7N的夜晚数。

我想从日期中减去1N列的1部分。

ex:25Oct15 - 1N = 24Oct15

显然,我将用实际的列名替换'1N‘。我试着做了个修剪:

代码语言:javascript
运行
AI代码解释
复制
date - left(no of nights, 1)

但我犯了个错误

将varchar值'25Oct16‘转换为数据类型int时,转换失败。

样本日期如下

代码语言:javascript
运行
AI代码解释
复制
Date                     |   NoofNIghts   | Result
 2016-04-26 00:00:00.000 |        1N      |
 2016-04-28 00:00:00.000 |        3N      |

其中结果列将是减去的值。任何帮助都会很好。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-02 20:59:30

代码语言:javascript
运行
AI代码解释
复制
SELECT DATEADD ( DAY, - CONVERT(INT, REPLACE(NoofNights, 'N', '')), getdate() ) as Result
票数 2
EN

Stack Overflow用户

发布于 2016-05-02 20:59:06

尝尝这个

代码语言:javascript
运行
AI代码解释
复制
DECLARE @V_Date DATETIME = '2016-04-26 00:00:00.000'
        ,@V_NoofNIghts VARCHAR(2) = '1N'

SELECT DATEADD(DAY, CAST(LEFT(@V_NoofNIghts,1) AS INT) *-1 ,@V_Date)
票数 1
EN

Stack Overflow用户

发布于 2016-05-02 20:59:22

好的基本查询应该类似于

代码语言:javascript
运行
AI代码解释
复制
Update tablename
set result= DATEADD(d, -CAST(LEFT(NoofNIghts, LEN(NoofNIghts)-1) AS INT),Date)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36995805

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文