如何在某个字符之前从sql查询返回字符串中的所有内容?
我的数据如下:
HD TV HM45VM - HDTV widescreen television set with 45" lcd
我想限制或截断字符串以包含破折号之前的所有内容。
所以最终结果将是“HD TV HM45VM”
答案 0 :(得分:6)
使用SUBSTRING,但您必须使用CHARINDEX或PATINDEX来获取您希望子字符串停止的字符的位置:
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'))
有效地,将连字符的位置作为起点。然后,您可以使用LEN
或DATALENGTH
函数。
答案 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
不包含-
分隔符,这与其他响应一样会导致错误。
最终,如果表中的始终是虚线分隔符,则应考虑使用两个字段。