从字符串转换日期和/或时间时TSQL转换失败
我收到了以下错误消息: 转换日期时转换失败 和/或来自字符串的时间 因为我需要比较时间和分钟。因此,我将所有时间值转移到同一日期,例如:从字符串转换日期和/或时间时TSQL转换失败,sql,sql-server,Sql,Sql Server,我收到了以下错误消息: 转换日期时转换失败 和/或来自字符串的时间 因为我需要比较时间和分钟。因此,我将所有时间值转移到同一日期,例如:2016-01-01,然后我可以找到我需要的 例如,查找每天的时间10:15AM 问题是:CONVERT(日期时间,QUOTENAME(2016-01-01)”)。除了缺少右括号外,还需要执行:CONVERT(日期时间,'2016-01-01') 要实现这一点,您必须在引号之外添加quotename,但我认为您根本不需要它 试试这个: declare @
2016-01-01
,然后我可以找到我需要的
例如,查找每天的时间10:15AM
问题是:
CONVERT(日期时间,QUOTENAME(2016-01-01)”)
。除了缺少右括号外,还需要执行:CONVERT(日期时间,'2016-01-01')
要实现这一点,您必须在引号之外添加quotename
,但我认为您根本不需要它
试试这个:
declare @startTime datetime,@strquery nvarchar(max)
set @startTime = '2016-01-01 10:00:00.000'
set @strquery =RIGHT(CONVERT(char(23),@startTime),12)
print @strquery
--print result: 10:15AM
set @strquery= '2016-01-01 '+RIGHT(CONVERT(char(23),@startTime),12)
print @strquery
--print result: 2016-01-01 10:15AM
set @strquery ='2016-01-01'+RIGHT(CONVERT(char(23),@startTime),12)
print @strquery
--print result: 2016-01-01 10:15AM
set @strquery =CONVERT(datetime, '2016-01-01'+RIGHT(CONVERT(char(23),@startTime),12))
print @strquery
--print result:Jan 1 2016 10:15AM
set @strquery ='select * from OneTransfer where CONVERT(datetime, QUOTENAME(2016-01-01,'''') +RIGHT(CONVERT(char(23),[FirstBoardTime]),12)) > '
+ QUOTENAME(CONVERT(nvarchar(100),@startTime),'''') +' order by FirstBoardTime'
print @strquery
--print result:select * from OneTransfer where CONVERT(datetime, QUOTENAME(2016-01-01,'') +RIGHT(CONVERT(char(23),[FirstBoardTime]),12)) > 'Jan 1 2016 10:15AM' order by FirstBoardTime
--The following line failed
execute sp_executesql @strquery
返回:
declare @startTime datetime,@strquery nvarchar(max)
set @startTime = '2016-01-01 10:00:00.000'
SET @strquery ='select * from OneTransfer where CONVERT( time, FirstBoardTime) > '''
+ CONVERT(VARCHAR(8), CONVERT( time, + @startTime)) + ''' order by FirstBoardTime'
SELECT @strquery
这就是我想你要找的。这需要等式中的日期部分。如果你真的需要它,我想这个解决方案会给你足够的时间来使用。我不知道你为什么在这里使用QUOTENAME-看看你打印出来的字符串,你是否知道
2016-01-01
,如果没有引号,就是2014
>“@Damien_不信者,我也注意到了,你对2014
”有什么解释吗?@HoneyBadger-因为它们是3个整数文本,从2016减去1会产生2014两次。@Damien_不信者…啊,显然,我自己也会想到的:P
select *
from OneTransfer
where CONVERT( time, FirstBoardTime) > '10:00:00'
order by FirstBoardTime