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