請教SQL 語句.

BenyMo 2003-12-04 09:53:44
select top 1000 卡號,
早上=(
select max(cdate) from cardmemo
where cardID=V_考勤時間表.卡號 and
cdate between datediff(mi,V_考勤時間表.有效時長,V_考勤時間表.早上上班) and datediff(mi,-V_考勤時間表.有效時長,V_考勤時間表.早上上班) )
from V_考勤時間表
以上語句返回如下錯誤
Server: Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.

但我把 and
cdate between datediff(mi,V_考勤時間表.有效時長,V_考勤時間表.早上上班) and datediff(mi,-V_考勤時間表.有效時長,V_考勤時間表.早上上班)
條件去掉就可以檢索出數據.

...全文
62 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
BenyMo 2003-12-08
  • 打赏
  • 举报
回复
是的.就是一值沒人提出.
teaism 2003-12-05
  • 打赏
  • 举报
回复
你错得很明显,DATEDIFF出来是数值型,cdate日期型怎么会用来BETWEEN呢?
显然要用DATEADD()
teaism 2003-12-05
  • 打赏
  • 举报
回复
你用错函数了吧!有效時長可能是个数值型.所以才超出范围!

可能要用DATEADD()


select max(cdate) from cardmemo
where cardID=V_考勤時間表.卡號 and
cdate between dateADD(mi,V_考勤時間表.有效時長,V_考勤時間表.早上上班) and dateADD(mi,-V_考勤時間表.有效時長,V_考勤時間表.早上上班) )
from V_考勤時間表
BenyMo 2003-12-05
  • 打赏
  • 举报
回复
我也希望用簡體.但本人的系統是繁體2000
hglhyy 2003-12-04
  • 打赏
  • 举报
回复
把下面的试下
select max(cdate) from cardmemo
where cardID=a.卡號 and
cdate between datediff(mi,a.有效時長,a.早上上班) and datediff(mi,-a.有效時長,a.早上上班)

ps: 有效時長 and 早上上班 字段的类型! 都是datetime吗?长度够不?
hglhyy 2003-12-04
  • 打赏
  • 举报
回复
一个建议:
请以后用简体中文,繁体的看起来好累!!
BenyMo 2003-12-04
  • 打赏
  • 举报
回复
檢查過了 早上上班 與 cdate 都是時間日期型的
BenyMo 2003-12-04
  • 打赏
  • 举报
回复
問題仍未解決.請各位出手邦助
LoveSQL 2003-12-04
  • 打赏
  • 举报
回复
以下是V_考勤時間表的視圖語句.
請問
早上上班=CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間1, 108),

這個早上上班得出的是dateTime 類型嗎?

------------------------------------------------

你这样的转换肯定是不对的。。。
试试---

select convert(varchar(10),'2003-01-01')+' '+convert(varchar(10),'12:12:23') as testdate

这个例子就是转换成datetime类型的
你可以照这个改一下你的程序
BenyMo 2003-12-04
  • 打赏
  • 举报
回复
字段類型我估計是沒問的題的我把
V_考勤時間表 的SQL 改成

CREATE VIEW dbo.V_考勤時間表
AS
SELECT dbo.RSZLB.卡號,dbo.日期.日期,
早上上班=cast(CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間1, 108) as datetime),
早上下班=cast(CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間2, 108) as datetime),
下午上班=cast (CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間3, 108) as datetime),
下午下班=cast(CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間4, 108) as datetime),
4 as 刷卡次數,有效時長
FROM dbo.時間表 CROSS JOIN
dbo.日期 CROSS JOIN
dbo.RSZLB




LoveSQL 2003-12-04
  • 打赏
  • 举报
回复
V_考勤時間表.有效時長 和
V_考勤時間表.早上上班
都应该是datetime 类型。
而你的错误提示好像是这两个字段有的不是datetime 类型,在转换的过程中出错了。

你检查一下你的字段类型吧。。。。。
suzh1133 2003-12-04
  • 打赏
  • 举报
回复
看提示应该是datediff(mi,V_考勤時間表.有效時長,V_考勤時間表.早上上班)转化时出错了,你可以单独测试一下这个时间转换是否有问题
BenyMo 2003-12-04
  • 打赏
  • 举报
回复
以下是V_考勤時間表的視圖語句.
請問
早上上班=CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間1, 108),

這個早上上班得出的是dateTime 類型嗎?

------------------------------------------------

CREATE VIEW dbo.V_考勤時間表
AS
SELECT dbo.RSZLB.卡號,dbo.日期.日期,
早上上班=CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間1, 108),
早上下班=CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間2, 108),
下午上班=CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間3, 108),
下午下班=CONVERT(char(11), 日期, 120) +' ' +CONVERT(char(8),時間4, 108),
4 as 刷卡次數,有效時長
FROM dbo.時間表 CROSS JOIN
dbo.日期 CROSS JOIN
dbo.RSZLB
IceRiver_11 2003-12-04
  • 打赏
  • 举报
回复
看错误提示是类型转换失败导致的错误,检查您的要转换成日期型的字段的取值吧!
BenyMo 2003-12-04
  • 打赏
  • 举报
回复
我最大的日期是 2012/11/9
BenyMo 2003-12-04
  • 打赏
  • 举报
回复
马可:
是什么意思呀?
txlicenhe 2003-12-04
  • 打赏
  • 举报
回复
select datediff(ss,'1999-01-01','2050-01-01')
-----------
1609459200

(所影响的行数为 1 行)

select datediff(ss,'1999-01-01','2550-01-01')
服务器: 消息 535,级别 16,状态 1,行 1
Difference of two datetime columns caused overflow at runtime.
txlicenhe 2003-12-04
  • 打赏
  • 举报
回复
是不是数据太大,超出了整型数据的范围?

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧