2012-06-28 34 views
8

Tôi đang sử dụng SQL.Xóa tiện ích khỏi tên tệp

Trong bảng tblDemo, một trong các cột là 'Tên tệp'. Mỗi hàng của cột này chứa một tên tệp khác với bất kỳ phần mở rộng nào. Ví dụ: 'flower.jpeg', 'batman.mov', study.pdf, v.v.

Vui lòng đề xuất cho tôi về truy vấn có thể giúp tôi xóa tiện ích mở rộng (và dấu chấm) từ mỗi hàng của cột 'tên tệp' . Vì vậy, tôi có thể lấy chỉ có tên Ex. 'hoa', 'batman', 'nghiên cứu', v.v.

Cảm ơn

+2

này sẽ giúp - http://stackoverflow.com/questions/1024978/find-index-of-last-occurrence-of-a-sub-string-using-t-sql – Kshitij

Trả lời

26

thử cái này ra:

UPDATE TableName 
SET FileName = REVERSE(SUBSTRING(REVERSE(FileName), 
         CHARINDEX('.', REVERSE(FileName)) + 1, 999)) 

View For a DEMO @ SQLFiddle.com

+0

u r champ. Nó đã làm việc. Nó thực sự loại bỏ phần mở rộng từ fileName, ngay cả khi tên tập tin có nhiều 'chấm' trong đó. Tôi sẽ chỉnh sửa bài viết của bạn chỉ một chút, để nó sẽ giúp đỡ bất kỳ người nào khác trong tương lai. – Kings

+3

Đối với người dùng MySQL sử dụng LOCATE thay vì CHARINDEX –

+0

Liên kết không hoạt động chính xác. – thecoolmacdude

6

Đã kiểm tra trên máy chủ Sql. Điều này cho thấy các tên tập tin không có phần mở rộng, thay đổi để Update/Set để sửa đổi dữ liệu.

SELECT left([FileName], len([FileName]) - charindex('.', reverse([FileName]))) 
    FROM tblDemo 

được sửa đổi: biến đổi sử dụng Xếp, vì vậy nó cũng hoạt động khi trường có chứa nhiều dấu chấm.

Ở đây Cập nhật Bảng phiên bản:

UPDATE Testing 
    Set [FileName] = left([FileName], 
         len([FileName]) - charindex('.', Reverse([FileName]))) 
+0

sẽ không hoạt động trong c ase "This.Is.My.Filename.Txt". – Ben

+0

Ben/Jcis - điều cần sửa đổi trong truy vấn được đề cập, để tính đến trường hợp tương tự như sau: - 'This.Is.My.Filename.Txt' – Kings

+0

được cập nhật để xử lý nhiều dấu chấm trong tên tệp – Jcis

Các vấn đề liên quan