我的记录如下:
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 ...
以上是一个程序。
思想?
答案 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
功能,并在len
和charindex
函数的帮助下执行此操作:
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条记录。
足够满足我的需求,谢谢。