根据函数的结果返回记录

时间:2015-04-09 20:15:09

标签: sql sql-server tsql

我的记录如下:

1)BEL
  1)MERSEN
  A)VISHAY-SPRAGUE
  电路合作伙伴
  BENTEK
  电路测试

我想返回一个不同的集合,如果记录有一个右括号,则删除整个括号前缀(1)MERSEN变为MERSEN)否则按原样返回记录。这是一个临时的,一次性查询。我尝试过这样的事情。

IF (CHARINDEX(')', (SELECT [MANUFACTURER] FROM [dbo].[QPL_ITMSUPAC_NF]), 1) > 0)

    SELECT DISTINCT SUBSTRING([dbo].[QPL_ITMSUPAC_NF].[MANUFACTURER], 4, 99)
    FROM [dbo].[QPL_ITMSUPAC_NF]

ELSE

    SELECT DISTINCT [dbo].[QPL_ITMSUPAC_NF].[MANUFACTURER]
    FROM [dbo].[QPL_ITMSUPAC_NF]

...但得到错误:

  

子查询返回的值超过1 ...

以上是一个程序。

思想?

4 个答案:

答案 0 :(得分:1)

使用exists并将函数移动到子查询中。在这种情况下,charindex()相当于like ')%'

IF (EXISTS (SELECT 1 FROM [dbo].[QPL_ITMSUPAC_NF] WHERE MANUFACTURER LIKE ')%') )
    SELECT DISTINCT SUBSTRING([dbo].[QPL_ITMSUPAC_NF].[MANUFACTURER], 4, 99)
    FROM [dbo].[QPL_ITMSUPAC_NF]
ELSE
    SELECT DISTINCT [dbo].[QPL_ITMSUPAC_NF].[MANUFACTURER]
    FROM [dbo].[QPL_ITMSUPAC_NF]

答案 1 :(得分:1)

您可以使用right功能,并在lencharindex函数的帮助下执行此操作:

select right(MANUFACTURER,len(MANUFACTURER)-charindex(')',MANUFACTURER)) 
from QPL_ITMSUPAC_NF

示例:

select right('1)a sample name',len('1)a sample name')-charindex(')','1)a sample name'))

输出:

a sample name

答案 2 :(得分:0)

您的子查询SELECT [MANUFACTURER] FROM [dbo].[QPL_ITMSUPAC_NF]返回的值超过1(表),但charindex()函数只需要1个值。

答案 3 :(得分:0)

SELECT DISTINCT LTRIM(RIGHT(MANUFACTURER,LEN(MANUFACTURER) - CHARINDEX(')',MANUFACTURER)))
FROM QPL_ITMSUPAC_NF

...返回2552条记录

IF (EXISTS (SELECT 1 FROM [dbo].[QPL_ITMSUPAC_NF] WHERE MANUFACTURER LIKE ')%') )
SELECT DISTINCT LTRIM(SUBSTRING([dbo].[QPL_ITMSUPAC_NF].[MANUFACTURER], CHARINDEX(')', [MANUFACTURER], 1) + 1, 99))
FROM [dbo].[QPL_ITMSUPAC_NF]
ELSE
SELECT DISTINCT [dbo].[QPL_ITMSUPAC_NF].[MANUFACTURER]
FROM [dbo].[QPL_ITMSUPAC_NF]

...返回了2495条记录。

足够满足我的需求,谢谢。