SQL如何切断字符串

时间:2010-07-30 19:34:20

标签: sql sql-server tsql string

我有一列字符串,其中包含城市,州和数字。

SPOKANE, WA           232/107
LAS VEGAS, NV         232/117
PORTLAND, OR          232/128

除此之外还有很多,但我想知道我是如何切断这一栏中的数字,只是显示城市和州或者甚至更好 - 切断数字并使城市和州成为一个单独的专栏

对于所有不同的记录,列的格式完全相同。

谢谢!

6 个答案:

答案 0 :(得分:7)

没有为你完成所有的工作......

城市:从位置0到第一个逗号出现的列的子字符串 - 1.
状态:从第一次出现逗号后的2个位置到下一个空格...修剪的列的子字符串。

请参阅:SUBSTRING()CHARINDEX()PATINDEX()

答案 1 :(得分:2)

要删除最后的数字,请使用子串方法,如下所示。

@str = SUBSTRING(@str, LEN(@str)-7, 7)

要分离城市和州,你需要某种分裂功能,但我不记得我的头脑对不起语法。

答案 2 :(得分:2)

我已经弄清楚了并编写了SQL ...然后我看到了Fosco's answer,但是因为我有它,所以我不妨发布它:

SELECT
    LEFT(yourcolumn, CHARINDEX(',', yourcolumn) - 1) AS City,
    RIGHT(LEFT(yourcolumn, CHARINDEX(',', yourcolumn) + 3), 2) AS State
FROM yourtable

此算法与Fosco的区别在于,假设状态正好是2个字母。如果情况并非总是如此,那么你应该使用另一个答案。

答案 3 :(得分:0)

编辑哎呀。刚看到问题是如何,而不是你应该如何。我猜这就是我得到的。

这里的其他答案正在查看substring(),所以我会单独留下你问题的这一部分。

至于将它们分成不同的列:如果xxx / yyy与City和State没有任何直接关联,那么我肯定会将它们移动到不同的列。的确,我至少会有三个栏目:城市,州,[WhateverYouCallThatCode]

继续编辑 如果它们始终位于专栏的右侧,Right(7, [Column])

怎么样?

答案 4 :(得分:0)

我认为这会以迄今为止建议的所有方式打破你的领域......

SELECT
   substring([field], 1, patindex('%[1-9]%', [field])-1) as [CITY_AND_STATE],
   substring([field], 1, charindex(',', [field])-1) as [CITY_ONLY],
   substring([field], charindex(',', [field]), patindex('%[1-9]%', [field])-1)) as [STATE_ONLY],
   substring([field], patindex('%[1-9]%', [field]), len([field])) as [NUMBERS_ONLY]
FROM
   [table]

答案 5 :(得分:0)

考虑使用REVERSE功能。如果你反转字符串,那么可以从正常字符串的长度中减去反向字符串中第一个空格的位置,以计算NNN / MMM的起始位置。

该方法对我解析文件路径效果很好。反转字符串并在反向字符串中查找第一个“\”表示路径结束的位置和文件名的开头。

如果您的数据格式符合您指定的格式,则此方法可能比其他方法更麻烦。但是当开始数据是“偶然”时,这种方法可以真正简化事情。