我在表格中有一个列(MarketID)。 我必须从中获得一个价值。 我必须在第二个位置检查分隔符(。)的出现,并查看分隔符后面是否有连续的三个数字,然后获取该值。如果没有在第四个位置检查是否出现分隔符(。)并查看分隔符后面是否有连续的三个数字,那么得到该值 否则得0。
1)在第一个记录中:' 3.001.1.16',在第二个位置有一个分隔符(。)和连续的3个数字存在(001),所以我的输出将是001.
。
2)在第二个记录3.1.006.4.7'中,在第二个位置有一个分隔符,但我们没有三个连续的数字,所以我们检查第四个位置并且有一个分隔符和连续三个数字存在,因此输出为006.
。
3)没有(。)分隔符所以output = 0。
create table dbo.SampleList
(
MarketID varchar(100)
)
insert into dbo.SampleList
select '3.001.1.16'
union all
select '3.1.006.4.7'
union all
select 'D16B000000:21109:4'
select * from dbo.SampleList
答案 0 :(得分:1)
假设来自dbo
的SQL Server,您可以使用CASE
语句:
SELECT MarketID,
CASE WHEN SUBSTRING(MarketID,2,1) = '.' AND TRY_CONVERT(int,SUBSTRING(MarketID,3,3)) IS NOT NULL THEN SUBSTRING(MarketID,3,3)
WHEN SUBSTRING(MarketID,4,1) = '.' AND TRY_CONVERT(int,SUBSTRING(MarketID,5,3)) IS NOT NULL THEN SUBSTRING(MarketID,5,3)
ELSE '0'
END
FROM #SampleList
TRY_CONVERT
至int
将验证3个字符是数字
答案 1 :(得分:0)
这是使用我几年前创建的函数的解决方案。
它允许您拆分字符串并获取表格。
CREATE FUNCTION [dbo].[splitStringToTable]
(
@List VARCHAR(MAX) ,
@Separator VARCHAR(MAX)
)
RETURNS @Results TABLE
(
ID INT
)
AS
BEGIN
SET @List = @List + ','
DECLARE @POS INT
DECLARE @TEMP VARCHAR(8000)
WHILE (Charindex(@Separator, @List)>0)
BEGIN
SET @POS = Charindex(@Separator, @List)
IF @POS > = 0
BEGIN
SET @TEMP = LEFT(@List, @POS-1)
IF @TEMP <> ''
INSERT INTO @Results (ID) VALUES (@TEMP)
SET @List = Substring(@List, Charindex(@Separator, @List)+len(@Separator), len(@List))
END
END
RETURN
END
GO
用法:
SELECT *, ISNULL((SELECT TOP 1 ID FROM dbo.[splitStringToStringTable](MarketID, '.') WHERE LEN(ID) = 3), 0) AS Result
FROM SampleList
答案 2 :(得分:0)
SELECT MarketID,
(CASE WHEN SUBSTRING(MarketID,2,1) = '.'
THEN
(CASE WHEN SUBSTRING(MarketID,6,1) = '.' THEN SUBSTRING (MarketID,3,3)
WHEN SUBSTRING(MarketID,4,1) = '.' THEN
(CASE WHEN SUBSTRING(MarketID ,8,1)='.' THEN SUBSTRING(MarketID,5,3) ELSE NULL END)ELSE NULL END)
WHEN MarketID NOT LIKE '%.%' THEN '0'
ELSE '0'
END ) AS Output
FROM dbo.SampleList