[英]Delimiter with a condition
我在表中有一個列 (MarketID)。 我必須從中得出一個價值。 我必須檢查第二個位置是否出現分隔符(.),並查看分隔符后是否有連續的三個數字,然后獲取該值。 如果不檢查在第四個位置是否出現 delimiter(.) 並查看分隔符后是否有連續的三個數字,則獲取該值,否則獲取 0。
1)在第一條記錄中:'3.001.1.16',在第二個位置有一個分隔符(.)並且存在連續的3個數字(001),所以我的輸出是001。
.
2)在第二條記錄'3.1.006.4.7'中,第二個位置有一個分隔符,但我們沒有三個連續的數字,所以我們檢查第四個位置,有一個分隔符,並且存在連續的三個數字,所以輸出是 006 。
.
3) 沒有 (.) 分隔符,因此輸出 = 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
假設來自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
to int
將驗證這 3 個字符是數字
這是使用我幾年前創建的函數的解決方案。
它允許您拆分字符串並作為結果獲得表格。
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
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.