【问题标题】:How to get a result set of string using like or compare如何使用like或compare获取字符串的结果集
【发布时间】:2015-06-14 16:43:41
【问题描述】:

使用 SQL Server 2008

Table 1 varchar(100)

Values1 (Always one row)

123ABC456

Table2 varchar(200)

Values2 (Mulitple Rows)

123ABC456
123ABC456INV1
123ABC456_JULY
JULY123ABC456
0123ABC456
99123ABC456
JULY 123ABC456 INV 1
123JULYABC456
123_ABC456

我想从 value2 中选择与 value1 完全匹配的值,并且前 9 个字符 values2 应该从 value1 中匹配。下面供大家参考

123ABC456 - Exact Match
123ABC456INV1 - First 9 Character Matched
123ABC456_JULY - First 9 Character Matched
JULY123ABC456 - No Match
0123ABC456 - No Match
99123ABC456 - No Match
JULY 123ABC456 INV 1 - No Match
123JULYABC456 - No Match
123_ABC456 - No Match

查询喜欢

Select * from table2 where values like '% table1 values %'

预期输出

123ABC456
123ABC456INV1
123ABC456_JULY

请对查询提出建议和支持

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    试试这个

    SELECT t2.Values2 
    FROM Table2 t2
    INNER JOIN Table1 t1 ON (t2.Values2 LIKE t1.Values1 + '%')
    

    它不关心 Values1 的长度,这是一件好事。

    【讨论】:

      【解决方案2】:

      这也是有效的:

      SELECT * FROM Table2 WHERE Value2 LIKE (SELECT Value1 FROM Table1) + '%'
      

      【讨论】:

        【解决方案3】:

        您可以为此使用SUBSTR

        SELECT 
            * 
        FROM 
            table1 t1 
        JOIN table2 t2 ON SUBSTR(t1.values,1,9) = SUBSTR(t2.values,1,9)
        

        编辑:SUBSTR 与数据库引擎更无关 - 因此,比 LEFT 更便携。

        【讨论】:

          【解决方案4】:

          你需要先声明匹配字符串,因为你想要相同的前缀,所以你应该使用='value%'

          DECLARE @match NVARCHAR(255)
          SELECT @match= (select * from @Table1) + '%';
          Select * from @Table2 where value like @match
          

          【讨论】:

            【解决方案5】:

            您可以使用LEFT函数。

            返回指定数量的字符串的左边部分 字符。

            SELECT Table2.Values2 
            FROM Table2
            JOIN Table1 
            ON LEFT(Table2.Values2, 9) = Table1.Values1
            

            【讨论】:

            • 你怎么知道 Values1 的长度正好是 9?
            • 正如 OP 所说:I want to select exact value1 match from value2 and First 9 characters values2 should be matched from value1.
            • 好吧,对不起,抱歉。
            【解决方案6】:

            试试这个......

            select DISTINCT Table2.Value
            from   Table1
            join   Table2
                on Table1.value = left(Table2.value,9)
            

            【讨论】:

              【解决方案7】:
              SELECT t2.Values2
              FROM Table2 t2
              INNER JOIN Table1 t1 
                 ON LEFT(t2.Values2,9) = t1.Values1
              

              【讨论】:

                猜你喜欢
                • 2020-07-11
                • 1970-01-01
                • 1970-01-01
                • 2011-11-04
                • 1970-01-01
                • 1970-01-01
                • 2023-03-28
                • 2013-01-04
                • 1970-01-01
                相关资源
                最近更新 更多