我有以下代码,它将提取逗号(“,”)之前的字符串:
SELECT LTRIM(LEFT(@Adresa, CHARINDEX(',', @Adresa)-1))
有时,逗号(',')不是我需要照顾的字符,因为它可能会丢失。有什么方法可以适应此查询,以便查找逗号和未找到逗号的另一个值?如果找到它,请完成该语句,而不要照顾下一个。谢谢!
修改
要评估的文字:我的地址,否。 23.
在某些情况下,用户错误会丢失逗号,并且上面的代码给我一个错误。如果缺少逗号,我想继续尝试找到“否”。
答案 0 :(得分:2)
这不是特别优雅,但是CASE语句将让您尝试尽可能多的选项。只需继续添加WHEN。命中的第一个将返回您的结果。
DECLARE @t TABLE (Adresa VARCHAR(50));
INSERT @t
(
Adresa
)
VALUES
('My Address, no. 23'), --With comma
('My Address2 no. 23'); --No comma
SELECT
CASE
WHEN CHARINDEX(',', Adresa) > 0
THEN LTRIM(LEFT(Adresa, CHARINDEX(',', Adresa)-1))
WHEN CHARINDEX('no.', Adresa) >0
THEN LTRIM(LEFT(Adresa, CHARINDEX('no.', Adresa)-1))
ELSE Adresa
END AS TestString
FROM @t
Results:
+--------------+
| TestString |
+--------------+
| My Address |
| My Address2 |
+--------------+
答案 1 :(得分:1)
DECLARE @Adresa VARCHAR(50) ='My Address, no. 23',
@org_len INT,
@check_len INT,
@Adresa_OUTPUT VARCHAR(50)
SET @org_len = (SELECT LEN(@Adresa))
SET @check_len = (SELECT LEN(SUBSTRING(@Adresa, CHARINDEX(',', @Adresa) + 1, LEN(@Adresa))))
IF @org_len <> @check_len
BEGIN
SET @Adresa_OUTPUT =(SELECT SUBSTRING(@Adresa,0,CHARINDEX(',',@Adresa,0)))
END
ELSE
BEGIN
SET @Adresa_OUTPUT = (SELECT SUBSTRING(@Adresa,0,CHARINDEX('.',@Adresa,0)))
SET @Adresa_OUTPUT = ( SELECT REVERSE(RIGHT(REVERSE (@Adresa_OUTPUT), len(@Adresa_OUTPUT) - NULLIF(charindex(' ', REVERSE(@Adresa_OUTPUT)),0))))
END
SELECT @Adresa_OUTPUT
答案 2 :(得分:1)
据我了解,您需要返回no.
之前的所有字符,然后删除,
(如果存在)
使用下一个查询:-
select Replace((left(@Adresa, charindex('no.', @Adresa) - 2)),',','')