【发布时间】:2019-10-28 15:54:37
【问题描述】:
我想知道以下过程是否有效,或者是否有更好的方法来解决这个问题:
表格由 4 个相关列组成:
- 身份证
- 出生日期 (1984-03-19)
- 名字(约翰)
- 姓氏(Doe)
我想连接这些列以创建“1984-03-19 John Doe”作为新列。然后我想以这种格式获取一个值列表(有一个包含 DOB、First、Last name 的 .csv 文件),并且只有在匹配时才从表中提取 Id。 p>
该表有数百万行,所以我想知道是否有更有效的方法来编写此查询。
这是针对临时请求的。
【问题讨论】:
-
你为什么想要这样做?
-
我很遗憾约翰确实在同一天出生。
-
@Larnu - 我有一个这种连接格式的大约 1k 个值的列表。我试图从表中找到他们的“Id”值。唯一需要比较的字段是 Dob、First 和 Last Name。
-
如果你想搜索表格,然后传递每一列的值:
WHERE Firstname = 'John' AND LastName = 'Doe' AND DoB = '19870319'执行WHERE FirstName + LastName + DoB = ...之类的操作会导致转换错误,如果您执行CONVERT@987654324 @ 它不会是一个 SARGable 查询 *由于CONVERT和连接)。如果查询速度很慢,可能是由于索引不佳或缺乏索引, -
您是说您已经有一个不同的表,其中包含“DOB First Last”作为您要与之比较的字段?如果是这样,您可以按照您的描述进行操作,或者我可能更喜欢相反的方法 - 将另一个字段拆分为 DOB、first、last,然后执行 DOB=DOB, first=first, last=last。
标签: sql sql-server