如何在SQLServer2005中比较时间

如何在SQLServer2005中比较时间,sql,sql-server,Sql,Sql Server,我在表中有两列,分别采用字符串格式starttime和endtime(HH:MM tt)格式 Starttime=12:15PM和endtime=12:52PM 我想在where子句中为sql查询添加条件,以检查startime是否大于endtime 如下图所示 Select * from table where StartTime > EndTime (我无法在此比较此情况) 谁能帮我加上写在哪里比较时间 注意:这两个值都以字符串格式存储。将字符串值转换为时间戳或日期时间格式,然后使用

我在表中有两列,分别采用字符串格式
starttime
endtime
(HH:MM tt)格式
Starttime=12:15PM
endtime=12:52PM
我想在where子句中为sql查询添加条件,以检查startime是否大于endtime

如下图所示

Select * from table where StartTime > EndTime
(我无法在此比较此情况)

谁能帮我加上写在哪里比较时间


注意:这两个值都以字符串格式存储。

将字符串值转换为时间戳或日期时间格式,然后使用where条件

--编辑

对于SQL Server

Select * from table where CONVERT(datetime, StartTime , 120) > CONVERT(datetime, EndTime , 120)

将字符串值转换为时间戳或日期时间格式,然后使用where条件

--编辑

对于SQL Server

Select * from table where CONVERT(datetime, StartTime , 120) > CONVERT(datetime, EndTime , 120)

在进行比较之前,需要将
字符串
值强制转换为
时间

Select * from table where CAST(StartTime As Time) > CAST(EndTime As Time)

但是,最好的解决方案是将
StartTime
EndTime
列的数据类型更改为数据类型
Time
,而不是
string
,在进行比较之前,您需要将
string
值转换为
Time

Select * from table where CAST(StartTime As Time) > CAST(EndTime As Time)
但是,最好的解决方案是将
StartTime
EndTime
列的数据类型更改为数据类型
Time
,而不是
string

试试这个

Select * from table where CAST(starttime AS TIME) > CAST(endtime AS TIME)

试试这个

 Select * from table where CAST( '2013/01/01 ' + starttime AS DATETIME) > CAST( '2013/01/01 ' + Endtime AS DATETIME)
试试这个

Select * from table where CAST(starttime AS TIME) > CAST(endtime AS TIME)

试试这个

 Select * from table where CAST( '2013/01/01 ' + starttime AS DATETIME) > CAST( '2013/01/01 ' + Endtime AS DATETIME)

您需要
CAST
将其转换为
TIME

Select * from tbl where CAST(StartTime as TIME) > CAST(EndTime as TIME)

您需要
CAST
将其转换为
TIME

Select * from tbl where CAST(StartTime as TIME) > CAST(EndTime as TIME)
试试这个

SELECT * FROM table WHERE CONVERT (TIME, StartTime) > CONVERT (TIME, EndTime)
对于SQL 2005:

SELECT * FROM table WHERE CONVERT(Varchar(8), CONVERT(DATETIME, StartTime), 8) > CONVERT(Varchar(8), CONVERT(DATETIME, EndTime), 8)
试试这个

SELECT * FROM table WHERE CONVERT (TIME, StartTime) > CONVERT (TIME, EndTime)
对于SQL 2005:

SELECT * FROM table WHERE CONVERT(Varchar(8), CONVERT(DATETIME, StartTime), 8) > CONVERT(Varchar(8), CONVERT(DATETIME, EndTime), 8)


您使用的是
MySQL
还是
sqlserver
?它们的语法差别很大。您应该将完整日期添加为starttime和endtime,在某些情况下,开始时间可能是23:55,结束时间可能是00:15。如果包含日期,则可以使用datediff获得正确的结果。@WernerWaage如果开始/结束时间是一个重复事件,该怎么办。@Magnus抱歉!我做了一个假设,而不是一个建议:)请检查这是您使用的是
MySQL
还是
sqlserver
?它们的语法差别很大。您应该将完整日期添加为starttime和endtime,在某些情况下,开始时间可能是23:55,结束时间可能是00:15。如果包含日期,则可以使用datediff获得正确的结果。@WernerWaage如果开始/结束时间是一个重复事件,该怎么办。@Magnus抱歉!我做了一个假设而不是一个建议:)如果你展示了实际的解决方案而不是解释它,请检查+1。你是对的,但他可能不知道怎么做(以及将来的参考)。我不确定他使用的数据库。这可以考虑,转换(datetime,String_to_b_converted,120)我使用的是sql server 2005,然后您可以使用CONVERT()本身。如果显示实际解决方案而不是解释它,则在其中使用此条件,+1。你是对的,但他可能不知道怎么做(以及将来的参考)。我不确定他使用的数据库。这可以考虑,转换(datetime,String_to_b_converted,120)我使用的是sql server 2005,然后您可以使用CONVERT()本身。您在其中使用此条件,我尝试过,但它显示以下错误类型TIME不是已定义的系统类型。@Irshad要使用
TIME
您需要2008或更高版本。但是使用
DateTime
也适用于您的情况。日期将为1900-01-01,但这并不重要,因为您只关心时间部分。当从字符串转换日期时间时,使用日期时间转换失败时,我遇到了此错误。即使在我启动此查询时,它也会从表中给我选择强制转换(转换(VARCHAR(10),starttime,100)为DateTime),它会给我类似这样的错误:从字符串转换DateTime时,转换失败。我试过了,但下面显示的错误类型TIME不是定义的系统类型。@Irshad用于使用
TIME
您需要2008或更高版本。但是使用
DateTime
也适用于您的情况。日期将为1900-01-01,但这并不重要,因为您只关心时间部分。当从字符串转换日期时间时,使用日期时间转换失败时,我遇到了此错误。即使我启动这个查询,它也会给我选择Cast(CONVERT(VARCHAR(10),starttime,100)作为DateTime)从表中,它会给我类似这样的错误:从字符串转换datetime时转换失败。当我从字符串转换datetime时使用datetime转换失败时,我会收到此错误。即使我启动此查询,它也会给我选择强制转换(转换(VARCHAR(10),starttime,100)为datetime)从表中,它会给我类似这样的错误:从字符串转换datetime时转换失败。当我从字符串转换datetime时使用datetime转换失败时,我会收到此错误。即使我启动此查询,它也会给我选择强制转换(转换(VARCHAR(10),starttime,100)为datetime)从表中,它给了我类似这样的错误:当从字符串转换datetime时,转换失败。实际上我使用的是sql server 2005,所以无法使用时间。时间将在sql server 2008及以上版本的sql server中起作用。请尝试以下操作:从表中选择*转换(Varchar(8),转换(DATETIME,StartTime),8)>转换(Varchar(8),转换(DATETIME,EndTime),8)实际上我正在使用sql server 2005,因此无法使用时间。时间将在sql server 2008及以上版本的sql server中起作用。您可以尝试以下操作:从CONVERT(Varchar(8),CONVERT(DATETIME,StartTime),8)>CONVERT(Varchar(8),CONVERT(DATETIME,EndTime),8)所在的表名中选择*