用于选择前 3 个字符的 Sql 查询

Posted

技术标签:

【中文标题】用于选择前 3 个字符的 Sql 查询【英文标题】:Sql query for selecting the first 3 characters 【发布时间】: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 的新手来说,这可能很容易研究或弄清楚。他们发布了提供答案所需的所有信息。 【参考方案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 |

【讨论】:

以上是关于用于选择前 3 个字符的 Sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

仅显示选择 SQL 中的前 5 个字符?

如何在访问报告详细信息部分中选择前 N 个或在 sql 子查询中选择前 N 个

在查询 SQL 中查询

在 SQL 连接语句中选择一对多关系中最匹配的记录

SQL - 如何避免将三个查询合并为一个

用于选择不同数据的高级 SQL 查询