【发布时间】:2016-06-29 16:17:19
【问题描述】:
我有一个无论如何都不漂亮的查询。它非常动态,并且由于它在我的应用程序中的用例而成为这种方式。简而言之,它允许用户选择他们想在报告中看到的字段,以及定义逻辑(WHERE 子句)以及最后他们想要排序的顺序。
为了简化此操作,我创建了一个包含所有可能包含在报告中的数据的视图。这样,它只是选择用户想要的字段并查询视图。
我现在遇到了一个实例,我遇到了一些1:many 情况,而不仅仅是单个数据点。一个例子是受影响国家的列表。在我看来,它是一个逗号分隔的列表United States, United Kingdom, Etc。这些数据只是在视图创建中填充并用逗号分隔。
问题
在创建这个时,我打算只对数据使用 IN 语句。然后我意识到IN 只是一个表函数,不能用于一串数据。
有没有办法获取一个值并将其与逗号分隔的数据字符串进行比较?
我试图创建一个 SQL Fiddle,但该网站不断崩溃。
CREATE TABLE Test (country varchar(100), account INT);
INSERT INTO Test ('United States, United Kingdom', '123');
INSERT INTO Test ('United States', '123567');
INSERT INTO Test ('United States, China, Japan', '123567');
-- Trying to find all the rows where `United States` is in the country column.
我曾尝试使用LIKE %country%,但它的功能与IN 不同,因为如果该国家/地区的一部分位于另一个国家/地区名称中,我将不需要这些数据。
是否可以创建任何类型的函数来充当 IN 语句,我可以在其中针对逗号分隔的字符串测试值?
【问题讨论】:
-
我编辑了我的答案以反映更像
IN-clause的行为。您的“爱尔兰”和“北爱尔兰”将得到正确处理...
标签: sql-server tsql stored-procedures sql-server-2012 dynamic-sql