将SQL Server中的字符串更改为缩写

时间:2010-03-11 21:22:46

标签: sql sql-server tsql

如何在某个字符之前从sql查询返回字符串中的所有内容?

我的数据如下:

HD TV HM45VM - HDTV widescreen television set with 45" lcd

我想限制或截断字符串以包含破折号之前的所有内容。

所以最终结果将是“HD TV HM45VM”

3 个答案:

答案 0 :(得分:6)

使用SUBSTRING,但您必须使用CHARINDEXPATINDEX来获取您希望子字符串停止的字符的位置:

SELECT SUBSTRING('HD TV HM45VM - HDTV widescreen television set with 45" lcd', 
                  0, 
                  CHARINDEX('-', 'HD TV HM45VM - HDTV widescreen television set with 45" lcd'))

要做相反的事情 - 将连字符左侧的所有内容删除 - 使用:

SELECT SUBSTRING('HD TV HM45VM - HDTV widescreen television set with 45" lcd', 
                  CHARINDEX('-', 'HD TV HM45VM - HDTV widescreen television set with 45" lcd') + 1,
                  LEN('HD TV HM45VM - HDTV widescreen television set with 45" lcd'))

有效地,将连字符的位置作为起点。然后,您可以使用LENDATALENGTH函数。

答案 1 :(得分:2)

不要忘记LEFT存在

select LEFT('HD TV HM45VM - HDTV widescreen television set with 45" lcd',CHARINDEX('-', 'HD TV HM45VM - HDTV widescreen television set with 45" lcd ')-1)

答案 2 :(得分:0)

好的,我也会抓住它,看看我是否可以简化:

SELECT LEFT(myfield', CHARINDEX(' - ', myfield) - 1)

通过将-包装在空格中,分隔符不太可能被绊倒,并且不需要修剪结果。

警告:如果myfield不包含-分隔符,这与其他响应一样会导致错误。

最终,如果表中的始终是虚线分隔符,则应考虑使用两个字段。