从字符串转换日期和/或时间时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