如何从具有大量输入的单个列的sql表中检索数据

时间:2014-03-17 18:54:26

标签: sql sql-server

我在SQL Server中有一个Company表,我想检索与特定公司相关的数据列表,公司列表中有大约200个公司名称,我试图使用T的IN子句-SQL使检索变得复杂,因为很少有公司在其名称中有特殊字符,如O'Brien,因此很明显会引发错误。

SELECT *
FROM COMPANY
WHERE COMPANYNAME  IN
    ('Archer Daniels Midland'
    'Shell Trading (US) Company - Financial'
    'Redwood Fund, LLC'
    'Bunge Global Agribusiness - Matt Thibodeaux'
    'PTG, LLC'
    'Morgan Stanley Capital Group'
    'Vitol Inc.'..
.....
....
.....)

上面是由于显而易见的原因而无法正常工作的脚本,有什么方法可以从excel文件中输入这些公司名称并检索数据?

3 个答案:

答案 0 :(得分:1)

最简单的方法是制作一张桌子并加入它:

CREATE TABLE dbo.IncludedCompanies (CompanyName varchar(1000)

INSERT INTO dbo.IncludedCompanies
VALUES
('Archer Daniels Midland'),
('PTG, LLC')
...

SELECT *
FROM Company C
JOIN IncludedCompanies IC
ON C.CompanyName = IC.CompanyName

答案 1 :(得分:0)

我认为mysql不知道如何处理excel格式,但你可以修复你的查询。 检查名称在数据库中存储的复杂程度(检查它们中是否包含转义字符或“。”

在查询中替换所有'with',它将处理'characters

的MySQL>选择now()为'O \'Brian';返回

奥布莱恩

2014-03-17 15:06:39

答案 2 :(得分:0)

所以我猜你有一张包含这些名字的列的excel表,你想在你的where子句中使用它。此外,某些值中包含特殊字符,需要进行转义。

你要做的第一件事是逃避' - 字符。您可以在excel中执行此操作,并使用'''(sqlserver中的转义版本(MySQL中为\')替换所有出现的版本。)然后,在每个上创建一个新列公司列的侧面和第一行在左侧输入',在右侧输入',。然后使用复制单元功能(当您选择它时,单元格右下方的小方块)将单元格左右复制到所有行,直到公司列表为止(只需抓住正方形并拉动它向下..)

然后,取出列表,现在包含三列和x行,并将其粘贴到您喜欢的文本编辑器中。看起来应该是这样的:

'      Company#1     ',
'      Company with special '' char     ',
[...]
'      Last company     ',

现在,你将有一些空白来摆脱。使用搜索替换并替换两个空格字符,并重复(或从第一个'中取出空格到文本的开头,并将其替换为空。

现在,你应该有一个清单:

'Company#1',
'Company with special '' char',
[...]
'Last company',

删除最后一个逗号,如果你想让你的查询更清晰一点,那么你的子句(或(临时)表)中就会有一个有效的参数列表。