【问题标题】:SQL query using Like and Between in the same statement在同一条语句中使用 Like 和 Between 的 SQL 查询
【发布时间】:2017-12-06 14:20:34
【问题描述】:

所以这是我的问题,我需要选择 2000-2008 年之间的记录,但我需要搜索的列是 varchar 类型示例:

IntRecordID     VARCHARYear
    1            1990-2000
    2            2001-2005
    3            2005-2006
    4            2007-2008
    5            2009-2020

选择在 2000 和 2008 之间具有 VARCHARYear 的所有记录 id

IntRecordID
    2
    3
    4

我需要什么 sql 查询来实现这一点?

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: php sql


【解决方案1】:

希望你的VARCHARYear字段永远是innYYYY-YYYY格式。

SELECT  *
FROM    table_name
WHERE   LEFT(VARCHARYear,4)     >   2000
    AND RIGHT(VARCHARYear,4)    <=  2008

【讨论】:

    【解决方案2】:

    你的sql会是这样的……

    SELECT column_name
    FROM table_name
    WHERE column_name BETWEEN value1 AND value2;
    

    【讨论】:

      【解决方案3】:

      使用这个查询:

      SELECT column_name
      FROM table_name
      WHERE LEFT(column_name, 4) >= value1 AND RIGHT(column_name, 4) <= value2
      

      我建议您最好再为您的年份添加 2 列,并将您的年份分开,比如说“year_from”和“year_to”,并将此列设为 year 作为数据类型。

      【讨论】:

        【解决方案4】:

        请尝试以下查询:
        在这里,我尝试使用 SUBSTRINGCHARINDEX 函数来分隔年份,因为您想在 VARCHARYear 列上使用 BETWEEN 子句。
        例如:SUBSTRING(VARCHARYear,1,(CHARINDEX('-', VARCHARYear)-1))
        然后我尝试通过UNION收集同一列的相同IntRecordID数据/行(例如:1990-200)。
        例如:
        SELECT IntRecordID ,SUBSTRING(VARCHARYear,1,(CHARINDEX('-', VARCHARYear)-1)) AS VARCHARYear FROM TABLE1 UNION SELECT IntRecordID ,SUBSTRING(VARCHARYear,(CHARINDEX('-', VARCHARYear)+1),len(VARCHARYear)) AS VARCHARYear FROM TABLE1
        最后,我使用 DISTINCT 一次获取重复的 IntRecordID 数据。
        希望对您有所帮助:

        SELECT DISTINCT IntRecordID
        FROM
        (
         SELECT IntRecordID
                ,SUBSTRING(VARCHARYear,1,(CHARINDEX('-', VARCHARYear)-1)) AS VARCHARYear
          FROM TABLE1
          UNION
          SELECT IntRecordID
                 ,SUBSTRING(VARCHARYear,(CHARINDEX('-', VARCHARYear)+1),len(VARCHARYear)) AS VARCHARYear
            FROM TABLE1
          )T
           WHERE CONVERT(INT,T.VARCHARYear) BETWEEN 2001 AND 2008  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-16
          • 1970-01-01
          • 1970-01-01
          • 2014-05-26
          • 2016-03-16
          • 2018-11-01
          • 2021-08-10
          相关资源
          最近更新 更多