获取第一个定界符之前的第一个单词

时间:2018-10-17 10:25:46

标签: sql sql-server

我正在使用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函数的长度参数无效。

似乎它可以与“隐形”空间相关?如何克服呢?谢谢。

4 个答案:

答案 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