仅在SQL Server中提取字符

时间:2016-11-20 13:29:20

标签: sql-server sql-server-2012 sql-server-2014

我在SQL Server 2014数据库中有以下示例数据

  • xxxx,yyyy:679459
  • XXXX,YYYY:679459
  • xxxx,yyyy:679459
  • xxxx,yyyy:679459

正如您所看到的,数据的编写方式并不统一,并且采用上述任何格式编写。

我试图只提取姓氏和名字,即xxxx,yyyy

从一些互联网搜索中我发现了以下内容并尝试了它

left(EMP_CLass_9_descr, isnull(nullif(charindex(' :', EMP_CLass_9_descr),0) - 1,8000)) As TM_NAME

这只适用于:

之前有空格的地方

我也试过

left(EMP_CLass_9_descr, isnull(nullif(charindex(':', EMP_CLass_9_descr),0) - 1,8000)) As TM_NAME

然后在场景中包含一个空格,它被写为

  • xxxx,yyyy:679459

有没有办法可以写出我只提取xxxx,yyyy?

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

这应该有效:

select ltrim(rtrim(left(EMP_CLass_9_descr,
                        charindex(':', EMP_CLass_9_descr + ':'
                                 )
                        )
                  ))

这会查找':',但也可以通过在名称的末尾附加冒号来确保有一个cd `dirname $MYPATH` 。然后它修剪返回的值以去除前导和尾随空格。

答案 1 :(得分:1)

Rasmac, 你快到了。试试这个:

Reader r = newReader(csv);
CSVParser csvParser= CSVFormat.TDF.withFirstRecordAsHeader().withQuoteMode(QuoteMode.ALL).parse(r);