2010-12-08 30 views
0

我有一個SQL表,其創建SQL顯示如下:查詢列在限制sqlserver.txt

++++++++++創建表腳本++++ ++++

USE [TestDB] 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Test](
    [LogTime] [nvarchar](50) NULL, 
    [EventTime] [nvarchar](50) NULL, 
    [value] [nvarchar](50) NULL, 
) ON [PRIMARY] 
GO 

// +++++++++結束++++++++

然而,當我從表中選擇的數據,這是值。

LogTime       EventTime   value 
-------------------------------------------------------------------- 
2010-11-26 12:10:31.907000000 634263264000000000 1.145604E-10 
2010-11-26 12:10:31.907000000 634263264000000000 1.373898E-9 
2010-11-26 12:10:31.907000000 634263264000000000 -2.3787419E-10 

爲什麼Eventtime不是日期格式?

此外,我需要根據日期從表中選擇一些東西,例如獲取其事件時間介於「2010-10-12 12:00:00」和「2010-10-12 17:00:00」之間的dat 「,那麼如何構建sql語句?

BWT,我不能改變表的結構,我只需要從數據庫讀取數據,永遠不會寫。

**

UPDATE:

**

其中一個SQL日期格式爲:

YYYY-MM-DD HH:MI:SS.MMM(24h) ODBC Canonical (with milliseconds) SELECT CONVERT(VARCHAR(23), GETDATE(), 121)  1972-02-19 06:35:24.489 

但爲什麼日期的毫秒數字我表是九?

贊:

1972-02-19 06:35:24。

我的數據:2010-11-26 12:10:31。

我想刪除毫秒,所以如何將它轉換爲sql字?

+0

你可以發佈用於填充`Test`表的代碼嗎? – InSane 2010-12-08 02:55:58

+0

什麼是*`eventtime` - 秒,毫秒? – 2010-12-08 03:10:57

+0

我沒有自己的代碼,數據由其他人填充。 – hguser 2010-12-08 06:02:48

回答

0

根據您已經顯示了EventTime的電流值,我認爲你需要從誰負責填寫此表,以澄清(如你已經指出它不是你的代碼)EventTime列中的數據是什麼格式。

因爲它目前是,我不知道任何特定的SQL日期時間格式,可以將此信息表示爲一個日期,以便您能夠處理您想要的WHERE條件。

List of common SQL Date formats

此外,我建議,如果可能的話,張貼負責填充Test表因爲這可能給一些指標,因爲在EventTime列中的數據(及其格式)的代碼。

編輯:基於評論,似乎數據存儲爲數據庫中正確的日期(儘管是字符串格式)。如果是這樣的話,下面應該可以工作。

注意:121也是包含毫秒的格式。您可以選擇使用120,以及如果您的日期並不需要毫秒

SELECT LogTime, CONVERT(DateTime, eventTime, 121), value 
FROM Test 
WHERE CONVERT(DateTime, eventTime, 121) BETWEEN 
    CONVERT(DateTime, '2010-10-12 12:00:00', 121) AND 
    CONVERT(DateTime, '2010-10-12 17:00:00', 121) 

注意:您可以通過做一次,並將其存儲在可能避免對2個硬編碼值(可能PARAMS)每一行的轉換一個日期時間變量。 另外,根據definition,BETWEEN包含兩個邊界。

0

如果可以,EVENTTIME更改爲datetime數據類型,而不是爲varchar