我目前正在使用數據庫,日期以(DD/MM/YYYY)格式存儲爲字符串。SQL查詢(查找範圍存儲爲字符串的日期)
我目前正試圖找到一系列的日期,即(15/07/2017 - 26/07/2017),然後將填充每週清單。
問題我有它,因爲這些值存儲爲SQL中的字符串我無法選擇一個範圍,除非我指定的值。
我想知道是否有任何SQL奇才誰可以幫助我。
謝謝, 喬
我目前正在使用數據庫,日期以(DD/MM/YYYY)格式存儲爲字符串。SQL查詢(查找範圍存儲爲字符串的日期)
我目前正試圖找到一系列的日期,即(15/07/2017 - 26/07/2017),然後將填充每週清單。
問題我有它,因爲這些值存儲爲SQL中的字符串我無法選擇一個範圍,除非我指定的值。
我想知道是否有任何SQL奇才誰可以幫助我。
謝謝, 喬
大家好我修改了我的答案,因爲前一個是不正確的,也是無益的其他用戶。總之,我不得不將日期更改爲在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() +
"';";
感謝您的反饋。
由於日期是以字符串形式存儲的,因此這不太有效。您需要將日期轉換爲使用between功能。例如,請參閱@scaisEdge答案。在你的服務器上這會很困難。您實際上應該轉換爲時間戳列類型,或者在時間戳中添加列並將數據複製到轉換後的數據。 –
這不起作用。這些是* not *日期,它們是字符串,它們將使用與字符串相同的比較方法。舉個例子 - 使用你的代碼,'11/04/2016'是'BETWEEN''10/07/2017'和'16/07/2017',因爲它將*作爲字符串*排序。您需要使用@ scaisEdge的答案中的方法。 – Siyual
謝謝斯隆我會研究它。它很煩人,他們存儲爲我知道的字符串。 – JAVAJoseph
你可以使用之間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')
輝煌非常感謝:) – JAVAJoseph
@JAVAJoseph好,如果我的回答是正確的,請將其標記爲已接受...看到這裏如何 http://meta.stackexchange.com/questions/5234/how-does-accepting-an- answer-work – scaisEdge
以正確的格式存儲日期。然後回到我們 – Strawberry
我沒有使數據庫預先存在。我認識的設計不佳,但最新的需求。 – JAVAJoseph
如果有人給你一個方形車輪的自行車,你會騎它嗎? – Strawberry