我有一个数据集,我试图在逗号之前获取所有内容,或者在没有逗号的情况下获取数据。基本上我想要获得critera1。这是它的样子:
User1 criteria1,criteria2,criteria3
User2 criteria1
User3 criteria1,criteria2
我已经尝试过这两个我找到了这个网站:
,LEFT([TURFS], CHARINDEX(',', [TURFS]) - 1) AS [TURF]
,REPLACE(LEFT(TURFS, CHARINDEX(',',TURFS)-1),',',' ')
但他们回来时出现错误,我猜测是因为我的某些数据行中没有逗号。
这是我得到的错误:
Msg 537,Level 16,State 2,Line 1
传递给LEFT或SUBSTRING函数的长度参数无效。
答案 0 :(得分:2)
只需添加一个条件:
CASE WHEN CHARINDEX(',', [TURFS]) >0 then LEFT([TURFS], CHARINDEX(',', [TURFS]) - 1)
else
[TURFS] end as newValue
答案 1 :(得分:1)
以下是对import sys
import io
srcfile = sys.argv[1]
with open(srcfile, 'rb') as f:
fio = io.FileIO(f.fileno())
fbuf = io.BufferedReader(fio)
print fbuf.read(20)
进行单次调用以获取结果的变体。如果找到逗号,则从第一个位置到逗号都包括但不包括逗号。如果没有逗号,则需要整个字段。
SUBSTRING
答案 2 :(得分:0)
这个怎么样?
DECLARE @tbl TABLE(UserName VARCHAR(100),Crit VARCHAR(100));
INSERT INTO @tbl VALUES
('User1','criteria1,criteria2,criteria3')
,('User2','criteria1')
,('User3','criteria1,criteria2');
WITH Splitted AS
(
SELECT UserName
,CAST('<x>' + REPLACE(Crit,',','</x><x>') + '</x>' AS XML) AS CritSplitted
FROM @tbl
)
SELECT UserName
,CritSplitted.value('/x[1]','nvarchar(max)') AS Crit1
,CritSplitted.value('/x[2]','nvarchar(max)') AS Crit2
,CritSplitted.value('/x[3]','nvarchar(max)') AS Crit3
FROM Splitted
结果
+-------+-----------+-----------+-----------+
| User1 | criteria1 | criteria2 | criteria3 |
+-------+-----------+-----------+-----------+
| User2 | criteria1 | NULL | NULL |
+-------+-----------+-----------+-----------+
| User3 | criteria1 | criteria2 | NULL |
+-------+-----------+-----------+-----------+
如果您的字符串可以包含三个邪恶字符,那么REPLACE
至<, > and &
如果您只想要第一个值,可以将其减少为单行:
< > and &