在SQL中,如何删除表中特定列的值的前4个字符?列名为“Student Code”,示例为“ABCD123Stu1231”。 我想从我的表中删除所有记录的前4个字符
请指引我
在SQL中,如何删除表中特定列的值的前4个字符?列名为“Student Code”,示例为“ABCD123Stu1231”。 我想从我的表中删除所有记录的前4个字符
请指引我
当前回答
当值的长度小于4时,顶部答案不合适。
在t - sql
您将得到“无效长度参数传递给正确的函数”,因为它不接受负号。使用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
其他回答
完整的东西
DECLARE @v varchar(10)
SET @v='#temp'
select STUFF(@v, 1, 1, '')
WHERE LEFT(@v,1)='#'
内置的修剪功能非常适合这个目的。
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
http://www.postgresql.org/docs/8.1/static/functions-string.html
当值的长度小于4时,顶部答案不合适。
在t - sql
您将得到“无效长度参数传递给正确的函数”,因为它不接受负号。使用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
Stuff(someColumn, 1, 4, '')
这就是说,从第一个字符位置开始,用空替换4个字符”
为什么使用LEN,这样就有了两个字符串函数?你只需要在…
...SUBSTRING (Code1, 5, 8000)...