在SQL语句中,如何查询某一时间的数据?(100分)

  • 主题发起人 笛卡尔
  • 开始时间

笛卡尔

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在一个有时间字段(hh:mm:nn格式)的表中,想查询出某一时间点的数据,如7:30分
结果SQL不能识别‘:’,请问如何办?(我用的是SQL Server2000).
 
先转换一下
 
在sql 中将时间用''引号引起来入select * form 表1 wher 时间〉'hh:mm'
 
tomboy:如何转换,用什么函数?
 
对,用‘’引起来
 
用引号引起来就算是字符啦! 应该可以的!
 
我尝试过用引号,结果明明有的数据也检索不出来!
 
select * from TableName where DATEPART(hh, FieldName)= 7
and DATEPART(mi, FieldName) = 30
 
既然你使用sql2000,sql 2000有一新功能 user defined function
打開enterprise manager ,你會看到user defined functiond,add一新的
function,把下面的code加進去.然後在程式內使用下面語法去抓回來
str:='select TMP=dbo.piece(你要抓的欄位,':',你要抓第幾個) from .. where....'
這語法應該沒錯,只是單引號問題請自己注意了.

CREATE FUNCTION piece (@Value VARCHAR(8000),@Delimiter
VARCHAR(1000),@PieceNumber INT)
RETURNS VARCHAR(8000) AS
begin

-- Declare
DECLARE @pos1 INT -- Start position of PieceNumber
DECLARE @pos2 INT -- End position of PieceNumber
DECLARE @int1 INT -- Loop variable
DECLARE @str1 VARCHAR(8000) -- PieceNumber found
DECLARE @str2 VARCHAR(8000) -- Value with extra delimiter added
-- Set Variables
SET @str2 = @Value + @Delimiter
SET @pos1 = 0
-- Find Piece
IF @PieceNumber = 1
begin
SET @pos2 = CHARINDEX(@Delimiter,@str2,1)
SET @str1 = CASE WHEN @pos2 > 1 then
SUBSTRING(@str2,1,@pos2-1) else
NULL
END
END
else
begin
SET @int1 = 1
WHILE @int1 < @PieceNumber
begin
SET @pos1 = CHARINDEX(@Delimiter,@str2,@pos1+1)
IF @pos1 = 0 GOTO EndPoint
SET @int1 = @int1+1
END
SET @pos1 = @pos1+LEN(@Delimiter)
SET @pos2 = CHARINDEX(@Delimiter,@str2,@pos1)
SET @str1 = CASE WHEN @pos2 > @pos1 then
SUBSTRING(@str2,@pos1,@pos2-@pos1) else
NULL END
END
EndPoint:
-- Return result
IF @str1 = '' SET @str1 = NULL
RETURN @str1
END


 
用参数吧
select * from database where time=:Time;
ADOQuery.Parameters.ParamByName('time').value:=now;
 
接受答案了.
 
顶部