2013-09-10 34 views
0

我在我的SQL Server表中有MeasureDateTimenvarchar(50))列。操縱字符串以提取日期時間

我需要得到

|measureFilePath | MeasureDateTime  |  MeasureName  | 
    | 12Nc121   |Thu Jun 19 15:00:05 2011| Annulus 4th RMS (Waves) | 
    | 12NB121   |Thu Jul 19 15:38:05 2012| 3.0mm 4th RMS (Waves) | 
    | 12NXc121  |Tue May 15 12:13:02 2012| BC (mm)     | 
    | 12NA121   |Tue May 15 12:13:02 2012| CT (mm)     | 
    | 12Nc111   |Tue May 15 12:13:02 2012| Reference Angle (deg.) | 
    | 12Nc231   |Wed May 15 12:03:02 2013| Temperature (C)   | 

我想最近6個月使用MeasureDateTime列數據,例如。

但問題是MeasureDateTimenvarchar類型。

任何人都知道如何做到這一點?它甚至有可能嗎?

+5

爲什麼你將日期時間存儲爲字符串? –

+0

如果您可以控制表格,並且可以使用ALTER TABLE,則應考慮將此列更改爲日期時間。 – rajah9

+0

我的猜測是這樣從一些進口來源,而不是SQL瞭解的標準日期格式 - 因此,varchar存儲 –

回答

2

嘗試

CONVERT(datetime,SUBSTRING(MeasureDateTime,4,100),101) 

到VARCHAR列轉換爲datetime格式。

SUBSTRING(MeasureDateTime,4,100)刪除日期字符串的工作日部分,並且格式爲101CONVERT()調用將接受美式日期格式。

的選擇可能看起來像

SELECT * FROM table WHERE DATEADD(month, 6, CONVERT(datetime,SUBSTRING(MeasureDateTime,4,100),101)) > getdate() 

我以前忽略的插入時間信息。在這裏再次嘗試日期轉換:

convert(datetime,substring(stuff(dt,11,0,right(dt,5)),4,21),101) 

這種方法依賴於相等的字符串長度。我不確定這是否是給定的。

+0

它不起作用,但一個好的想法...我會去工作soem更多...錯誤信息:轉換日期和/或時間從字符串轉換失敗。 – Angelina

1

這是一個有點令人費解,但可能工作:

WHERE DATEDIFF(Month, CAST(RIGHT(MeasureDateTime, LEN(MeasureDateTime) - 4) as datetime), GETDATE()) <= 6 
0

嘗試插入使用時觸發此表。試用@ cars10提供的解決方案獲取日期並將其存儲在datetime字段中。始終將日期時間字段保留爲datetime而不是varchar字段。稍後您必須根據日期檢索記錄,並且此datetime字段將證明是有用的。