存储在nvarchar字段中的字符串,例如'CA:No:1250.00000',并希望基于分隔符对字符串进行分区,例如 第1栏应显示CA(州) 第2栏应显示“否”(可恢复,不可恢复) 第3栏应显示1250.00000(税率)
我尝试了下面的代码,但在所有情况下都无法正常工作。如果Recov设置为是
SELECT
SUBSTRING(SDESC, 0, CHARINDEX(':', SDESC)) AS STATENAME,
SUBSTRING(SUBSTRING(SDESC, CHARINDEX(':', SDESC) + 1, LEN(SDESC)), 0, CHARINDEX(':', SUBSTRING(SDESC, CHARINDEX(':', SDESC) +
1, LEN(SDESC)))) RECOV,
SUBSTRING(SDESC, CHARINDEX(':', SDESC) + 4, LEN(SDESC)) AS REMANING
FROM
LOOKUP
WHERE
SLISTNAME = 'StateTax'
预期结果是基于定界符的3个不同的列:发生
答案 0 :(得分:1)
您可以尝试一下。由于您的字符串格式相同,因此字符串中始终有2个:
。因此,我们将使用REVERSE
来获取字符串的最后一部分,因为中间部分的长度可变,即i,e; 3
的{{1}}和YES
的{{1}}。
2
结果:-
NO
答案 1 :(得分:1)
由于字符串的前2个部分是相对静态的,所以可以这样做:
select
left(sdesc,2) col1,
replace(substring(sdesc,4,3),':','') col2,
replace(stuff(sdesc, 1,6, ''),':','') col3
from your_table
答案 2 :(得分:0)
select substring(SDESC, 1, charindex(":", SDESC) - 1) --should give you the state,
select substring(SDESC, 4, charindex(":", SDESC) - 1) --should give you the NO, etc.
select right(SDESC, charindex(":", reverse(SDESC)) - 1) --should give you the rest.