繁体   English   中英

SQL如何切断字符串

[英]SQL how to cut off string

我有一列字符串,每个字符串都包含城市,州和数字。

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

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

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

谢谢!

没有为你做所有的工作......

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

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

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

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

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

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

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

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

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

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

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

继续编辑如果他们总是在你的专栏的右边,那么Right(7, [Column])怎么样?

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

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]

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM