簡體   English   中英

sql server:我的日期數據出了什么問題?

[英]sql server: what's wrong with my date data?

我有一個日期列,但它是一個varchar:

8/31/2010 9:48
8/31/2010 9:49
8/31/2010 9:51
8/31/2010 9:52
8/31/2010 9:55
8/31/2010 9:59
8/31/2010 10:11
8/31/2010 10:13
8/31/2010 10:16
8/31/2010 10:37
8/31/2010 10:42

我確保這些都不是一個糟糕的日期:

SELECT *
FROM qcvalues.dbo.batchinfo
WHERE ISDATE(reporttime) <> 1

這返回0結果

問題:我需要在某個范圍之間返回日期:

select rowid from qcvalues.dbo.batchinfo where CONVERT(DATE, Substring( reporttime, 1, LEN(reporttime)), 103)
    between cast('2010-08-01' as datetime) and CAST('2010-08-31' as datetime)

我收到了這個錯誤;

Msg 241, Level 16, State 1, Line 2
Conversion failed when converting date and/or time from character string.

我的轉換有什么問題?

如果您需要存儲日期,請在將來使用日期時間列

這有用嗎?

WHERE CONVERT(DATE,RTRIM(reporttime))
BETWEEN '2010-08-01' and '2010-08-31' 

如果在運行之前不使用SET DATEFORMAT MDY

如果你必須將它存儲在varchar列中,那么使用YYYYMMDD格式......你可以這樣做

如果您想要2010年8月, WHERE reporttime like '201008%'

在查詢之前放置SET DATEFORMAT MDY。

這將解決您的問題:

select rowid
from qcvalues.dbo.batchinfo
where
   CONVERT(DATE, reporttime, 101) >= '20100801'
   -- style 101, not 103
   -- also notice date conversion invariant format YYYYMMDD with no separators
   AND CONVERT(DATE, reporttime, 101) < '20100901'
   -- using BETWEEN with an end date of '8/31/2010' will skip
   --   times between '8/31/2010 00:00:00.003' and '8/31/2010 23:59:59.997'

試試看看問題是什么:

select convert(datetime, '8/31/2010 9:48', 103)
select convert(datetime, '8/31/2010 9:48', 101)

請記住,此CAST('2010-08-31' as datetime)時間CAST('2010-08-31' as datetime)的時間部分為00:00

考慮將varchar數據轉換為smalldatetime,並具體說明您之間的時間邊界。 無需轉換,子串等等。只需一個CAST

將此視為潛在的解決方案:

SELECT rowid from qcvalues.dbo.batchinfo 
WHERE CAST(reporttime as smalldatetime)
BETWEEN '2010-08-01' AND '2010-08-31 23:59'

這也將剝離時間部分

select rowid 
    from qcvalues.dbo.batchinfo 

    Where cast(floor(cast(cast(reportTime as datetime)as float))as datetime)

     between    cast('2010-08-01' as datetime)
     and        cast('2010-08-31' as datetime)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM