我在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文件中输入这些公司名称并检索数据?
答案 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',
删除最后一个逗号,如果你想让你的查询更清晰一点,那么你的子句(或(临时)表)中就会有一个有效的参数列表。