2015-09-02 130 views
0

我想比較的DateTime字符串在DB datetime值列,但其返回我0的記錄下面是該查詢與日期時間字符串的SQL Server比較datetime列值

DECLARE @p_date DATETIME 
SET @p_date= CONVERT(DATETIME, '9/1/2015 10:06:22 PM', 131) 
SELECT UpdateUserId, UpdateTimeA 
From SubmitSheets 
WHERE CONVERT(DATETIME, UpdateTimeA, 131) = @p_date 

在UpdateTimeA列中的值是2015-09-01 22:06:22.447

+0

你在SubmitSheets UpditeTimeA存儲? – lad2025

+0

沒有它的類型是datetime –

+0

如果它返回0記錄肯定是一個數據問題? –

回答

0

我認爲@p_date參數的格式不一樣。試試這個:

DECLARE @p_date DATETIME 
SET @p_date= CONVERT(DATETIME, '9/1/2015 10:06:22 PM') 
SELECT UpdateUserId, UpdateTimeA 
From SubmitSheets 
WHERE CONVERT(DATETIME, (CONVERT(VARCHAR, UpdateTimeA, 101) + ' ' + CONVERT(VARCHAR, UpdateTimeA, 108)), 131) = CONVERT(DATETIME, @p_date, 131) 

所以另一個試用可能

一個例子:

DECLARE @a TABLE 
(
    ID int, 
    datet datetime 
) 

INSERT INTO @a 
     (ID, datet) 
VALUES (1 , CONVERT(DATETIME, GETDATE(), 131)) 
     ,(2 , CONVERT(DATETIME, GETDATE(), 131)) 
     ,(3 , CONVERT(DATETIME, GETDATE(), 131)) 
     ,(4 , CONVERT(DATETIME, GETDATE(), 131)) 
     ,(5 , CONVERT(DATETIME, GETDATE(), 131)) 
     ,(6 , CONVERT(DATETIME, GETDATE(), 131)) 
     ,(7 , CONVERT(DATETIME, GETDATE(), 131)) 
     ,(8 , CONVERT(DATETIME, GETDATE(), 131)) 
     ,(9 , CONVERT(DATETIME, GETDATE(), 131)) 



SELECT ID, datet, ConvDatetime 
FROM 
    (
     SELECT ID, datet 
      ,CONVERT(DATETIME, (CONVERT(VARCHAR, datet, 101) 
      + ' ' 
      + CONVERT(VARCHAR, datet, 108)), 131) AS ConvDatetime 
     FROM 
      @a 
    ) AS dt 
WHERE 
    dt.ConvDatetime= CONVERT(DATETIME, 
          (CONVERT(VARCHAR, GETDATE(), 101) 
          + ' ' 
          + CONVERT(VARCHAR, GETDATE(), 108)) 
         , 131) -- CONVERT(DATETIME, '9/1/2015 10:06:22 PM', 131) 
+0

仍然是相同的結果 –

+0

它是由於「10:06:22 PM」,當它被轉換爲日期時間,131格式,然後它產生「2576-08-04 22:06:22000」,其中在表格數據日期時間也有毫秒部分即。像「2015-09-02 17:11:37.380」。要麼截斷毫秒部分,要麼在where子句中添加毫秒部分。另外一年是另一個轉換即。 2576年8月4日。 –

0

就像我在我的評論說,我不知道131是轉換爲datetime合適的款式(至少,我得到了一個非常不同的價值)。

如果您想比較沒有第二部分的日期,則必須將其作爲字符串進行比較。將這兩個日期轉換爲varchar(19)將切斷分數。

+0

讓我試試這個 –

+0

@AdilWaqar問題,而不是131看到這裏http://www.w3schools.com/sql/func_convert.asp ms問題是'000'和'447' – wiretext

0

終於找到nvarchar列的方式

SELECT UpdateUserId,UpdateTimeA 
From SubmitSheets 
WHERE CONVERT(VARCHAR(16),UpdateTimeA,100) = CONVERT(VARCHAR(16),CONVERT(DATETIME, '9/1/2015 10:06:22 PM',101),100) 
+1

'select CONVERT(VARCHAR(16) ,'2015-09-01 22:06:22.447',100)'和 'select CONVERT(VARCHAR(16),CONVERT(DATETIME,'9/1/2015 10:06:22 PM',101),100 )'這兩個語句返回2個不同的值是否與where子句一起工作 – wiretext