我正在使用SQL Server 2012。
我需要更新一列以仅获取第一个点之前的单词。 代码将nvarchar作为数据类型。
示例-Table_A
Id Code
1 TXT.yut.get
2 yep.no
3 gT.YU.iop
4 gip
我需要在更新后得到它
Id Code
1 txt
2 yep
3 gt
4 gip
我已经尝试过使用T-SQL:
Update table_A
SET Code=lower(SUBSTRING(Code, 1, CHARINDEX('.',Code) - 1))
我收到此错误:
传递给LEFT或SUBSTRING函数的长度参数无效。
似乎它可以与“隐形”空间相关?如何克服呢?谢谢。
答案 0 :(得分:3)
包含WHERE
子句:
UPDATE table_A
SET Code = LOWER(SUBSTRING(Code, 1, CHARINDEX('.',Code) - 1))
WHERE Code like '%.%';
答案 1 :(得分:2)
Update table_A
SET Code=substr(Code,1,instr(Code,'.',1)-1)
where Code like '%.%'
答案 2 :(得分:2)
以上所有答案都可以完成工作,我还将包括两种不同的方法:
使用CASE
UPDATE Table_A
SET
Code = CASE WHEN CHARINDEX('.', Code) > 0 THEN LEFT(Code, CHARINDEX('.', Code) - 1) ELSE Code END
以及以下没有案例:
UPDATE Table_A
SET
Code = LEFT(Code, CHARINDEX('.', Code) - 1)
WHERE
CHARINDEX('.', Code) > 0
这里唯一的区别是,它将仅从每行中获取第一个点。与LIKE %.%
不同的是CHARINDEX('.', Code)
会覆盖每一行的所有点。如果没有点,则foos.each { |foo| foo.bar.baz }
的结果将为零。
答案 3 :(得分:1)
SELECT LEFT(Code, LOCATE(".", Code)-1) AS left FROM table_A