SQL查询(查找范围存储为字符串的日期)

SQL查询(查找范围存储为字符串的日期)

问题描述:

我目前正在使用数据库,日期以(DD/MM/YYYY)格式存储为字符串。SQL查询(查找范围存储为字符串的日期)

我目前正试图找到一系列的日期,即(15/07/2017 - 26/07/2017),然后将填充每周清单。

问题我有它,因为这些值存储为SQL中的字符串我无法选择一个范围,除非我指定的值。

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

谢谢, 乔

+1

以正确的格式存储日期。然后回到我们 – Strawberry

+0

我没有使数据库预先存在。我认识的设计不佳,但最新的需求。 – JAVAJoseph

+0

如果有人给你一个方形车轮的自行车,你会骑它吗? – Strawberry

大家好我修改了我的答案,因为前一个是不正确的,也是无益的其他用户。总之,我不得不将日期更改为在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

你可以使用之间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