【问题标题】:SQL query, check year on one columnSQL查询,在一列上检查年份
【发布时间】:2017-07-27 16:26:38
【问题描述】:

我的 MySQL 表中有一个列显示年份。 示例:

表:信息 身份证 | Year_sold --- -------- 1 | 2002-2010 2 | 2005-2015 3 | 2011-____ 4 | 1975-1978

我会询问该表是否有要显示特定年份的数据。 示例:

SELECT * FROM Information WHERE Year_sold = '2012';

这当然行不通,但是如果结果应该是 ID 2 和 3,我该如何键入 SQL 查询。

如果该项目仍处于活动状态且正在销售,则年份将显示为 ID 3,“2011-____”。如果需要,我可以替换“____”。

【问题讨论】:

  • 创建一个sqlfiddle 看看我能做什么
  • 这是糟糕的表格设计。将每年存储在单独的列中,或者更好地存储在单独的行中。
  • 换桌设计让你可以使用NULL而不是____,这样处理起来更简单。

标签: mysql sql


【解决方案1】:

使用BETWEENLEFTSUBSTRING_INDEX 函数。

SELECT ID, Year_sold
FROM Information
WHERE '2012' BETWEEN LEFT(Year_sold,4) AND SUBSTRING_INDEX(Year_sold,'-',-1)

输出

ID  Year_sold
2   2005-2015
3   2011-____

SQL 小提琴:http://sqlfiddle.com/#!9/7df7b7/1/0

如果可能的话,我会从你的表结构重新开始,并有类似的东西:

表格:信息

ID | Year_sold_from | Year_sold_to
--- ------------------------------
1  | 2002           | 2010
2  | 2005           | 2015
3  | 2011           | null
4  | 1975           | 1978

【讨论】:

  • 非常好的答案:)
  • 我更愿意像你说的那样制作桌子,但这不是一个选择。每次更新表格时都会做很多工作。您的回答非常好,效果很好!不知道这是可能的,但你能解释一下你在这里检查的内容吗? SUBSTRING_INDEX(Year_sold,'-',-1)
  • SUBSTRING_INDEX(Year_sold,'-',-1) 返回 - 字符之后的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2019-01-22
  • 2012-05-16
  • 2017-01-08
  • 2023-01-16
  • 2012-05-15
  • 1970-01-01
相关资源
最近更新 更多