2010-06-07 54 views
1

在表中,時間和日期字段是兩個單獨的字段。我需要做一個這樣的查詢給所有記錄日期和時間< = givenDateTime。我該怎麼做?如何查詢日期和時間字段分開的數據庫?

編輯 我的查詢: -

select DateField, TimeField from Table1 where DateField <= '07/26/2009' and TimeField <= '16:26:20' 

結果是: -

2008-04-22 00:00:00.000 1899-12-30 23:59:58.000

2009年-04-15 00:00:00.000 1899-12-30 23:59:56.000

2006-06-06 00:00:00.000 1899-12-30 23:59:53.000

查看結果中的上述時間。其錯誤

+4

這些字段是以純文本還是以實際日期列存儲的?如果是這樣,時間字段與什麼日期保存? – 2010-06-07 20:43:01

+0

真實日期時間類型 – Jango 2010-06-07 20:43:45

回答

0

分手@givenDateTime的日期分量和時間分量,並使用AND建立起來的WHERE子句:從here採取

DECLARE @givenDate DATETIME 
SELECT @givenDate = DATEADD(dd, 0, DATEDIFF(dd, 0, @givenDateTime)) 

DECLARE @givenTime DATETIME 
SELECT @givenTime = CONVERT(varchar(2), 
     CASE 
      WHEN DATEPART([hour], @givenDateTime) > 12 THEN CONVERT(varchar(2), (DATEPART([hour], @givenDateTime) - 12)) 
      WHEN DATEPART([hour], @givenDateTime) = 0 THEN '12' 
      ELSE CONVERT(varchar(2), DATEPART([hour], @givenDateTime)) 
     END 
) + ':' + 
CONVERT(char(2), SUBSTRING(CONVERT(char(5), @givenDateTime, 108), 4, 2)) + ' ' + 
CONVERT(varchar(2), 
     CASE 
      WHEN DATEPART([hour], @givenDateTime) > 12 THEN 'PM' 
      ELSE 'AM' 
     END 
) 

SELECT * FROM myTable 
WHERE tableDate <= @givenDate AND tableTime <= @givenTime 

日期轉換。 時間轉換取自here

請注意,@givenTime的日期爲01 Jan 1900(加上時間),因此請確保您的where子句將此考慮在內。

+0

我已經做了,但結果不準確。看到我上面編輯的問題 – Jango 2010-06-07 20:55:16

+0

現在工作。唯一的問題是我必須通過Date和時間字段。像這樣: - 從Table1中選擇DateField,TimeField,其中DateField <= '07/26/2009'和TimeField <='1899-12-30 16:26:20' – Jango 2010-06-08 13:55:30

0

您可以天真地添加日期時間值。

http://cloudexchange.cloudapp.net/stackoverflow/q/2558

注意,這可能不是SARG'able。

我在這裏假設一列是SQL Server 2008日期,一個是TIME。

-- Datetime Combination Example 
SELECT CAST(dt AS datetime) + CAST(tm AS datetime) AS dtm 
FROM (
    SELECT CAST('6/7/2010' AS DATE) AS dt, CAST('12:34:00' AS TIME) AS tm 
) AS X 

如果他們已經是兩個日期時間:

SELECT dt + tm AS dtm 
FROM (
    SELECT CAST('6/7/2010' AS DATETIME) AS dt, CAST('12:34:00' AS DATETIME) AS tm 
) AS X 
1

與您的數據模型:

select DateField, 
     TimeField 
from Table1 
where (DateField < '07/26/2009') 
    or (DateField = '07/26/2009' and TimeField <= '16:26:20') 

但最好你可以有一個computed列,將有完整的日期和時間DateTimeField,只是相對於這個查詢。如果這是您經常查詢的查詢,那麼您可以使此計算列保持不變,甚至可以在此列上創建索引。創建SQL Server 2008中這個計算列,如果你使用DATETIME數據類型(如圖凱德的回答)很簡單:

DateTimeField AS CONVERT(DATETIME, DateField + TimeField) PERSISTED NOT NULL 

在SQL Server 2005的情況下,你可能需要做一些轉換。

相關問題