CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

請教SQL 語句.

楼主BenyMo(BenyMo)2003-12-04 09:53:44 在 MS-SQL Server / 基础类 提问

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_考勤時間表.早上上班)    
  條件去掉就可以檢索出數據.  
   
  问题点数:20、回复次数:18Top

1 楼txlicenhe(马可)回复于 2003-12-04 09:58:36 得分 0

是不是数据太大,超出了整型数据的范围?  
  Top

2 楼txlicenhe(马可)回复于 2003-12-04 10:00:42 得分 0

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.Top

3 楼BenyMo(BenyMo)回复于 2003-12-04 10:05:18 得分 0

马可:  
          是什么意思呀?Top

4 楼BenyMo(BenyMo)回复于 2003-12-04 10:06:47 得分 0

我最大的日期是   2012/11/9Top

5 楼IceRiver_11(iceriver)回复于 2003-12-04 10:21:28 得分 0

看错误提示是类型转换失败导致的错误,检查您的要转换成日期型的字段的取值吧!Top

6 楼BenyMo(BenyMo)回复于 2003-12-04 10:26:57 得分 0

以下是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.RSZLBTop

7 楼suzh1133(suzh)回复于 2003-12-04 10:30:59 得分 0

看提示应该是datediff(mi,V_考勤時間表.有效時長,V_考勤時間表.早上上班)转化时出错了,你可以单独测试一下这个时间转换是否有问题Top

8 楼LoveSQL(努力奋斗ing)回复于 2003-12-04 10:39:14 得分 0

V_考勤時間表.有效時長   和  
  V_考勤時間表.早上上班  
  都应该是datetime   类型。  
  而你的错误提示好像是这两个字段有的不是datetime   类型,在转换的过程中出错了。  
   
  你检查一下你的字段类型吧。。。。。Top

9 楼BenyMo(BenyMo)回复于 2003-12-04 10:43:17 得分 0

字段類型我估計是沒問的題的我把  
  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  
   
   
   
   
  Top

10 楼LoveSQL(努力奋斗ing)回复于 2003-12-04 10:43:58 得分 0

以下是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类型的  
  你可以照这个改一下你的程序  
  Top

11 楼BenyMo(BenyMo)回复于 2003-12-04 10:54:18 得分 0

問題仍未解決.請各位出手邦助Top

12 楼BenyMo(BenyMo)回复于 2003-12-04 11:07:54 得分 0

檢查過了   早上上班   與   cdate   都是時間日期型的Top

13 楼hglhyy(為人民币服务!)回复于 2003-12-04 11:22:02 得分 0

一个建议:  
  请以后用简体中文,繁体的看起来好累!!  
  Top

14 楼hglhyy(為人民币服务!)回复于 2003-12-04 11:31:43 得分 0

把下面的试下  
  select   max(cdate)   from   cardmemo    
  where   cardID=a.卡號   and    
  cdate   between   datediff(mi,a.有效時長,a.早上上班)   and   datediff(mi,-a.有效時長,a.早上上班)  
   
  ps:     有效時長     and   早上上班     字段的类型!   都是datetime吗?长度够不?  
  Top

15 楼BenyMo(BenyMo)回复于 2003-12-05 16:35:55 得分 0

我也希望用簡體.但本人的系統是繁體2000Top

16 楼teaism()回复于 2003-12-05 17:04:19 得分 20

你用错函数了吧!有效時長可能是个数值型.所以才超出范围!  
   
  可能要用DATEADD()  
   
   
  select   max(cdate)   from   cardmemo    
  where   cardID=V_考勤時間表.卡號   and    
  cdate   between   dateADD(mi,V_考勤時間表.有效時長,V_考勤時間表.早上上班)   and   dateADD(mi,-V_考勤時間表.有效時長,V_考勤時間表.早上上班)   )  
  from   V_考勤時間表Top

17 楼teaism()回复于 2003-12-05 17:06:26 得分 0

你错得很明显,DATEDIFF出来是数值型,cdate日期型怎么会用来BETWEEN呢?  
  显然要用DATEADD()  
  Top

18 楼BenyMo(BenyMo)回复于 2003-12-08 10:49:26 得分 0

是的.就是一值沒人提出.Top

相关问题

  • 请教请教SQL SQL 语句语句^_^
  • SQL语句请教
  • 请教 SQL 语句
  • 请教SQL语句
  • 求教sql语句
  • 请教sql语句
  • sql语句请教?
  • SQL语句求教
  • sql语句请教
  • SQL语句请教?

关键词

  • 字段
  • 转换
  • 時間
  • 考勤時間表
  • 早上上班
  • 日期
  • convert
  • cdate
  • 有效時長
  • datediff

得分解答快速导航

  • 帖主:BenyMo
  • teaism

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo