Câu trả lời:
SELECT RIGHT(MyColumn, LEN(MyColumn) - 4) AS MyTrimmedColumn
Chỉnh sửa: Để giải thích, RIGHT lấy 2 đối số - chuỗi (hoặc cột) để hoạt động và số lượng ký tự sẽ trả về (bắt đầu từ phía "bên phải" của chuỗi). LEN trả về độ dài của dữ liệu cột và chúng tôi trừ bốn để hàm RIGHT của chúng tôi để lại 4 ký tự ngoài cùng bên trái "phía sau".
Hy vọng điều này có ý nghĩa.
Chỉnh sửa lại - Tôi vừa đọc phản hồi của Andrew, và anh ta rất có thể đã xen kẽ chính xác, và tôi có thể bị nhầm lẫn. Nếu đây là trường hợp (và bạn muốn CẬP NHẬT bảng thay vì chỉ trả về kết quả đã được chứng minh), bạn có thể làm điều này:
UPDATE MyTable
SET MyColumn = RIGHT(MyColumn, LEN(MyColumn) - 4)
Anh ấy đi đúng hướng, nhưng giải pháp của ông sẽ giữ 4 nhân vật lúc bắt đầu của chuỗi, chứ không phải ném bỏ nói 4 ký tự.
COL_LENGTH('MyTable', 'MyColumn')
thay LEN(MyColumn)
vì bởi vì trong trường hợp của tôi, tôi muốn loại trừ n ký tự đầu tiên bất kể kích thước của nội dung thực tế trong cột, nhưng điều này hoạt động tốt hơn thế!
Stuff(someColumn, 1, 4, '')
Điều này nói rằng, bắt đầu với 1
vị trí ký tự đầu tiên , thay thế các 4
ký tự không có gì''
someColumn
một cái gì đó phức tạp như một phần phụ từ CTE hoặc một số thứ gì đó, thì điều này không yêu cầu đánh giá nó hai lần.
Tại sao sử dụng LEN để bạn có 2 hàm chuỗi? Tất cả những gì bạn cần là nhân vật 5 trên ...
...SUBSTRING (Code1, 5, 8000)...
Thử cái này:
update table YourTable
set YourField = substring(YourField, 5, len(YourField)-3);
Đây là một mô phỏng đơn giản về những gì bạn đang cố gắng làm :)
CREATE TABLE Codes
(
code1 varchar(10),
code2 varchar(10)
)
INSERT INTO Codes (CODE1, CODE2) vALUES ('ABCD1234','')
UPDATE Codes
SET code2 = SUBSTRING(Code1, 5, LEN(CODE1) -4)
Vì vậy, sử dụng câu lệnh cuối cùng chống lại trường bạn muốn cắt :)
Hàm SUBSTRING cắt xuống Code1, bắt đầu từ ký tự NĂM và tiếp tục với độ dài CODE1 nhỏ hơn 4 (số lượng ký tự được bỏ qua khi bắt đầu).
Bạn cũng có thể làm điều này trong SQL ..
substring(StudentCode,4,len(StudentCode))
cú pháp
substring (ColumnName,<Number of starting Character which u want to remove>,<length of given string>)
Câu trả lời hàng đầu không phù hợp khi các giá trị có thể có độ dài nhỏ hơn 4.
Bạn sẽ nhận được "Tham số độ dài không hợp lệ được truyền cho đúng chức năng" bởi vì nó không chấp nhận phủ định. Sử dụng câu lệnh CASE:
SELECT case when len(foo) >= 4 then RIGHT(foo, LEN(foo) - 4) else '' end AS myfoo from mytable;
Các giá trị nhỏ hơn 4 đưa ra hành vi đáng ngạc nhiên bên dưới thay vì lỗi, bởi vì việc chuyển các giá trị âm sang RIGHT cắt các ký tự đầu tiên thay vì toàn bộ chuỗi. Nó có ý nghĩa hơn để sử dụng RIGHT(MyColumn, -5)
thay thế.
Một ví dụ so sánh những gì bạn nhận được khi bạn sử dụng "độ dài - 5" của câu trả lời hàng đầu thay vì "-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
Có chức năng cắt tích hợp hoàn hảo cho mục đích này.
SELECT trim(both 'ag' from 'asdfg');
btrim
-------
sdf
(1 riga)
Nó sẽ là tốt để chia sẻ, Đối với sử dụng DB2:
INSERT(someColumn, 1, 4, '')
Stuff
không được hỗ trợ trong DB2