2012-06-04 43 views
1

我們正在重構一個奇怪的系統,在其後端應該存儲爲數字和日期列,具有適當設計的約束的值全部存儲爲varchar(僅使用UI驗證)。問題是,我們做這個新的系統我們的人必須開始這樣運行,而:Varchar字段上的日期時間和整數函數

是否可以操縱這個VARCHAR列作爲整數爲更低或更高的比較,並考慮到日期存儲在相同的格式dd/MM/yyyy是可以把這也varchar列作爲日期和使用的功能如下:IN BETWEEN?

回答

1

會是這樣的工作:

SELECT Column1, Column2 
FROM Table 
WHERE CONVERT(datetime, DateColumn, 3) BETWEEN @StartDate AND @EndDate 
+0

一個問題:根據你的經驗,這是一個很大的表現懲罰或不是這樣一個問題。謝謝。 –

+0

除非你有大量的數據,並且已經等待了很長時間才能得到結果,否則這不應該是一個大問題。 –

+0

如果這是你要求的,這不是可靠的。如果你正在處理大量的記錄,並且你將會執行這個查詢很多,我會建議創建一個實際的日期時間列,所以你不需要做CONVERT。 –

2

你可以添加一個計算列(或一列的視圖),如:

CONVERT(DATE, column_name, 103) 

對於性能方面的問題,你可以堅持和/或索引計算列。

但是,如果你打算改變結構,也可以在第一個地方修改數據類型。