2016-10-11 135 views
2

这是一种通过使用SQL搜索数组的方法吗?SQL-SERVER搜索数组

SELECT Top 1 IVDTL.YourPONo 
FROM IV 
    INNER JOIN IVDTL 
    ON IV.DOCKEY = IVDTL.DOCKEY 
WHERE DocNo = /*array[0]*/ 

任何人有想法吗?

回答

0

对于Mysql可以使用FIND_IN_SET

SELECT Top 1 IVDTL.YourPONo 
from IV 
INNER JOIN IVDTL 
ON IV.DOCKEY = IVDTL.DOCKEY 
WHERE FIND_IN_SET(DocNo ,'array[0]') > 0 

更新:

对于SQL SERVER

你需要分割字符串函数和数组各行分割值。然后,它可以在IN条款

用于SQL SERVER 2016

可以使用STRING_SPLIT功能

SELECT Top 1 IVDTL.YourPONo 
FROM IV 
    INNER JOIN IVDTL 
    ON IV.DOCKEY = IVDTL.DOCKEY 
WHERE DocNo in (select value from STRING_SPLIT('array[0]',',') 

对于任何事情小于SQL SERVER 2016

上使用任何从下面优秀的文章Split strings the right way – or the next best way

下面的方法e为使用的一种方式XML

CREATE FUNCTION dbo.SplitStrings_XML 
(
    @List  NVARCHAR(MAX), 
    @Delimiter NVARCHAR(255) 
) 
RETURNS TABLE 
WITH SCHEMABINDING 
AS 
    RETURN 
    ( 
     SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)') 
     FROM 
     ( 
     SELECT x = CONVERT(XML, '<i>' 
      + REPLACE(@List, @Delimiter, '</i><i>') 
      + '</i>').query('.') 
    ) AS a CROSS APPLY x.nodes('i') AS y(i) 
    ); 

创建功能使用该功能在查询

SELECT Top 1 IVDTL.YourPONo 
FROM IV 
    INNER JOIN IVDTL 
    ON IV.DOCKEY = IVDTL.DOCKEY 
WHERE DocNo in (select value from SplitStrings_XML('array[0]',',') 
+0

这表明经过=====“ FIND_IN_SET'不是公认的内置函数名称。 – ChengWan

+0

@ChengWan这里是Mysql官方文档链接http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set –

+0

@ChengWan - 你确定你正在使用'Mysql' –