用于选择前 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 查询的主要内容,如果未能解决你的问题,请参考以下文章