2017-07-19 129 views
-1

我目前正在使用數據庫,日期以(DD/MM/YYYY)格式存儲爲字符串。SQL查詢(查找範圍存儲爲字符串的日期)

我目前正試圖找到一系列的日期,即(15/07/2017 - 26/07/2017),然後將填充每週清單。

問題我有它,因爲這些值存儲爲SQL中的字符串我無法選擇一個範圍,除非我指定的值。

我想知道是否有任何SQL奇才誰可以幫助我。

謝謝, 喬

+1

以正確的格式存儲日期。然後回到我們 – Strawberry

+0

我沒有使數據庫預先存在。我認識的設計不佳,但最新的需求。 – JAVAJoseph

+0

如果有人給你一個方形車輪的自行車,你會騎它嗎? – Strawberry

回答

-2

大家好我修改了我的答案,因爲前一個是不正確的,也是無益的其他用戶。總之,我不得不將日期更改爲在SQL中正確存儲爲日期。總之不幸的是沒有捷徑。

這是一個SQL查詢,我使用(沒有SQL注入保護),我希望這是有益

"SELECT * FROM placement WHERE ('" + StartDate.ToString("yyyy-MM-dd") + "' 
between StartDate and EndDate OR '" + EndDate.ToString("yyyy-MM-dd") + "' 
between StartDate and EndDate or StartDate = '" + StartDate.ToString("yyyy- 
MM-dd") + "' or EndDate = '" + StartDate.ToString("yyyy-MM-dd") + "' or 
StartDate = '" + EndDate.ToString("yyyy-MM-dd") + "' or EndDate = '" + 
EndDate.ToString("yyyy-MM-dd") + "') AND YearGroup = '" + 
User.IntakeYear.ToString() + "' AND Cohort = '" + User.Cohort.ToString() + 
"';"; 

感謝您的反饋。

+0

由於日期是以字符串形式存儲的,因此這不太有效。您需要將日期轉換爲使用between功能。例如,請參閱@scaisEdge答案。在你的服務器上這會很困難。您實際上應該轉換爲時間戳列類型,或者在時間戳中添加列並將數據複製到轉換後的數據。 –

+0

這不起作用。這些是* not *日期,它們是字符串,它們將使用與字符串相同的比較方法。舉個例子 - 使用你的代碼,'11/04/2016'是'BETWEEN''10/07/2017'和'16/07/2017',因爲它將*作爲字符串*排序。您需要使用@ scaisEdge的答案中的方法。 – Siyual

+0

謝謝斯隆我會研究它。它很煩人,他們存儲爲我知道的字符串。 – JAVAJoseph

3

你可以使用之間STR_TO_DATE如:

select * 
from my_table 
where str_to_date(my__date_column, '%d/%m/%Y') 
    between str_to_date('15/07/2017', '%d/%m/%Y') 
     and str_to_date('26/07/2017', '%d/%m/%Y') 
+0

輝煌非常感謝:) – JAVAJoseph

+2

@JAVAJoseph好,如果我的回答是正確的,請將其標記爲已接受...看到這裏如何 http://meta.stackexchange.com/questions/5234/how-does-accepting-an- answer-work – scaisEdge