Answers:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
编辑:要说明,RIGHT接受2个参数-要操作的字符串(或列),以及要返回的字符数(从字符串的“右侧”开始)。LEN返回列数据的长度,我们减去4,以便我们的RIGHT函数将最左边的4个字符留在“后面”。
希望这是有道理的。
再次编辑-我刚刚阅读了安德鲁的回答,他很可能正确地理解了我的观点,并且我可能会误会。如果是这种情况(并且您想更新表而不是仅仅返回篡改的结果),则可以执行以下操作:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
他走在正确的轨道上,但是他的解决方案将4个字符保留在字符串的开头,而不是丢弃所述4个字符。
COL_LENGTH('MyTable', 'MyColumn')
而不是,LEN(MyColumn)
因为在我的情况下,无论列中实际内容的大小如何,我都希望排除前n个字符,但是除此以外,它还不错!
Stuff(someColumn, 1, 4, '')
这表示从第一个1
字符位置开始,4
什么都不要替换字符''
someColumn
是复杂的事情,例如来自CTE的子选择或其他操作,则不需要对其进行两次评估。
为什么要使用LEN,所以您有2个字符串函数?您需要的只是角色5的...
...SUBSTRING (Code1, 5, 8000)...
您也可以在SQL中执行此操作。
substring(StudentCode,4,len(StudentCode))
句法
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
当值的长度可能小于4时,最合适的答案不合适。
您将获得“无效的长度参数传递给正确的函数”,因为它不接受负数。使用CASE语句:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
小于4的值在下面给出了令人惊讶的行为,而不是错误,因为将负值传递给RIGHT会修剪第一个字符而不是整个字符串。改为使用它更有意义RIGHT(MyColumn, -5)
。
比较使用最高答案的“长度-5”而不是“ -5”时得到的结果的示例:
create temp table foo (foo) as values ('123456789'),('12345678'),('1234567'),('123456'),('12345'),('1234'),('123'),('12'),('1'), ('');
select foo, right(foo, length(foo) - 5), right(foo, -5) from foo;
foo len(foo) - 5 just -5
--------- ------------ -------
123456789 6789 6789
12345678 678 678
1234567 67 67
123456 6 6
12345
1234 234
123 3
12
1
内置修剪功能非常适合此目的。
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html