【问题标题】:Sql query for selecting the first 3 characters用于选择前 3 个字符的 Sql 查询
【发布时间】:2019-11-21 15:44:34
【问题描述】:

我正在尝试从 2 个表中选择记录,其中名为 DESC 的第一个表列(前 3 个字符)应与第二个表的项目列匹配。

select SUBSTRING(a.[DESC],1,3) from Table1 a
left outer join Table2 b
on a.[DESC] = b.project
where SUBSTRING(a.[DESC],1,3) like b.project

输入: 第一个表 DESC 列: 值:'2AB F YY'

第二个表项目列: 值:'2AB'

预期输出: 返回值为 2AB 的所有记录

【问题讨论】:

  • 请输入和预期输出?
  • 刚刚编辑了我的问题
  • 如果可能的话,您应该考虑修复您的数据模型。您似乎在 TableA 中存储了多条数据。该项目和一堆其他东西。当您像这样将多个数据点推到一起时,这违反了 1NF。它会强制您的查询不可搜索。即使是持久的计算列也会更好。
  • @SeanLange 感谢您的建议!
  • 不知道为什么有人反对这个。这个问题很清楚,对于 t-sql 的新手来说,这可能很容易研究或弄清楚。他们发布了提供答案所需的所有信息。

标签: sql sql-server stored-procedures stored-functions


【解决方案1】:
select SUBSTRING(a.[DESC],1,3),* from Table1 a
join Table2 b
on SUBSTRING(a.[DESC],1,3) = b.project

【讨论】:

  • 您也可以使用 LEFT(a.[Desc], 3) 代替子字符串,因为它是前 3 个字符。
  • 哦,那太好了。谢谢
【解决方案2】:

请不要使用 DESC 等保留关键字

SQL Fiddle

MS SQL Server 2017 架构设置

CREATE TABLE Table1 ([DESC] varchar(255))
CREATE TABLE Table2 (Project varchar(255))
INSERT INTO Table1([DESC])values('2AB F YY')
INSERT INTO Table2(Project)values('2AB')

查询 1

select SUBSTRING(a.[DESC],1,3)
from Table1 a
join Table2 b
on SUBSTRING(a.[DESC],1,3) = b.project

Results

|     |
|-----|
| 2AB |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多