2014-11-17 54 views
0

我試圖找到今天的日期,這是多張值的串聯,但有8位日期開始沒有任何破折號或值之間的差之差正斜線。我相信我的語法有問題,但我還沒有足夠的技巧來看我做錯了什麼。以下是我迄今爲止:使用則DateDiff()找到GETDATE()和concatonated價值

select DateDiff(dd, (select MIN(CAST(Left(batchid, 8) as Date)) from 
[Table]), getdate()) from [Table] 

這是返回以下錯誤:「消息241,級別16,狀態1,行1個 轉換從字符串轉換日期和/或時間時失敗」

+0

什麼是錯誤你得到什麼? 8位數字的日期又是什麼樣子?他們是yyyymmdd,mmddyyyy等... – SQLChao

+0

JChao。日期是YYYYMMDD,並且我收到的錯誤已添加到帖子中。 –

+0

嗯,顯然至少有一個排在那裏'batchid'不與有效日期開始。這只是我們將日期作爲日期存儲的許多原因之一,而不是某些字符串的一部分。 –

回答

1

我認爲你有數據,其中左8不是yyyymmdd格式的有效日期。您可以運行以下查詢來查找它們

select batchid, isdate(Left(batchid, 8)) 
from [Table] 
where isdate(Left(date, 8)) = 0 

這是您的查詢的正確語法。您的原始示例有一個額外的括號,我認爲這是一個錯字,因爲您的錯誤似乎與數據有關。

select 
    datediff(dd, (select min(cast(left(batchid, 8) as date)) 
        from [Table]), getdate()) 
+0

謝謝@Jhao。這實際上與我正在使用的其他表格一起工作。 –

0

你能否提供一些更多的細節。 也就是說,batchid在8位數字格式中是什麼樣的?是YYYYMMDD還是DDMMYYYY或MMDDYYYY?

此外,你可以告訴我們以下的結果呢?

select MIN(CAST(Left(batchid, 8) as Date))) 
from [Table]) 

Sry對於使用答案,我沒有代表直接在下面添加評論。

+0

MADnoobie。日期是YYYYMMDD,並且在使用您給我的查詢時,它返回「Msg 241,Level 16,State 1,Line 1 轉換日期和/或時間從字符串轉換失敗。 –

0

這可能是錯誤。我正在使用另一張桌子,而且兩個人都忘記了batchID。表中的連接的batchID發佈了一個關於無法轉換爲日期的問題。