Transact SQL帮助

时间:2011-03-23 03:03:32

标签: tsql sql-server-2008-r2

无法让这个工作有一个使用前端视觉工作室2010的网络应用程序和sql2008r2后端得到此错误

“插入记录时出错。从字符串转换日期和/或时间时,转换失败。”

我有这些字段和数据类型

StartDate value=date
StartTime value=varchar(8)
EndDate value = date
EndTime value=varchar(8)

我正在尝试将startdate + StartTime添加到customstartdate字段中但是转换时出现错误

convert(varchar(10), @StartDate,101) +
   stuff(right(convert(varchar(26),@StartTime,109 ),15),7,7, ' ' ),
    convert(varchar(10),@EndDate, 101) +
   stuff(right(convert(varchar(26),@EndTime,109 ),15),7,7, ' ' ),

1 个答案:

答案 0 :(得分:1)

您应该在SQL Management Studio中测试转换,以查看它返回的内容。

declare @StartDate datetime = getdate()
declare @EndDate datetime = getdate()
declare @StartTime varchar(8) = '10:00:00'
declare @EndTime varchar(8) = '11:00:00'

select
convert(varchar(10), @StartDate,101) +
   stuff(right(convert(varchar(26),@StartTime,109 ),15),7,7, ' ' ) as StartDate,
    convert(varchar(10),@EndDate, 101) +
   stuff(right(convert(varchar(26),@EndTime,109 ),15),7,7, ' ' ) as EndDate

结果

StartDate           EndDate
------------------- -------------------
03/23/201110:00:    03/23/201111:00: 

你也可以将转换分成几部分,以便看到会发生什么

select
  convert(varchar(10), @StartDate,101) as DatePart, 
  convert(varchar(26),@StartTime,109) as Time26,
  right(convert(varchar(26),@StartTime,109 ),15) as Time15,
  stuff(right(convert(varchar(26),@StartTime,109 ),15),7,7, ' ' ) as TimeStuff

结果

DatePart   Time26                     Time15          TimeStuff
---------- -------------------------- --------------- ---------
03/23/2011 10:00:00                   10:00:00        10:00: 

这就是我要做的。结果是日期时间。

select
  convert(datetime, convert(varchar(10), @StartDate, 101)+' '+@StartTime) as StartDate,
  convert(datetime, convert(varchar(10), @EndDate, 101)+' '+@EndTime) as EndDate

结果

StartDate               EndDate
----------------------- -----------------------
2011-03-23 10:00:00.000 2011-03-23 11:00:00.000