2010-03-16 33 views
12

Tôi chỉ gặp vấn đề thú vị khi cố gắng cắt các số 0 đầu tiên từ một trường không phải là số trong SQL. (Vì nó có thể chứa các ký tự, nó có thể không chỉ được chuyển đổi sang một số và sau đó trở lại.)Thuật toán để cắt các số 0 hàng đầu từ một trường SQL?

Đây là điều chúng ta đã kết thúc bằng:

SELECT REPLACE(LTRIM(REPLACE(fieldWithLeadingZeroes,'0',' ')),' ','0') 

Nó thay thế zero với không gian, trái Trims nó, và sau đó đặt các số 0 vào. Tôi nghĩ đây là một cách rất thông minh và thú vị để làm điều đó, mặc dù không thể đọc được nếu bạn chưa bao giờ gặp nó trước đây.

Có cách nào rõ ràng hơn để thực hiện việc này không? Còn cách nào hiệu quả hơn để làm điều này? Hoặc bất kỳ cách nào khác để làm giai đoạn này? Tôi đã bị hấp dẫn bởi vấn đề này và sẽ quan tâm để xem bất kỳ phương pháp nhận được xung quanh nó.

+1

thông minh nếu trường không bao giờ chứa khoảng trắng để bắt đầu bằng – John

+0

@John - true. Trong trường hợp này thì không. Đó là trường ID có thể chứa chữ cái hoặc số. – froadie

+0

Hmmmmm Tôi đã hy vọng có thêm câu trả lời. Có thực sự không có cách nào khác để làm điều này? – froadie

Trả lời

11

Tìm 1st khác không nhân vật, substring để kết thúc (có thể đặt 2 tỷ với nhiều loại max)

LTRIM là không bắt buộc, thực sự

DECLARE @MyVar varchar(8000) 

SET @MyVar = '000foobar' 
SELECT LTRIM(SUBSTRING(@MyVar, PATINDEX ('%[^0]%', @MyVar), 8000)) 
SET @MyVar = '000000 oh my lord' 
SELECT LTRIM(SUBSTRING(@MyVar, PATINDEX ('%[^0]%', @MyVar), 8000)) 
+0

Chà. Tốt đẹp. Cảm ơn ... Tôi không bao giờ có thể tự mình nghĩ ra được, tôi vẫn sợ những khuôn mẫu và những biểu cảm thông thường. :) – froadie

+0

PATINDEX/LIKE khá đơn giản so với RegEx ... – gbn

0

Kiểm tra chức năng TRIM http://www.1keydata.com/sql/sql-trim.html

SELECT TRIM(LEADING '0' FROM fieldWithLeadingZeroes) 
+0

Tuyệt. Nó dường như không hoạt động, mặc dù - tôi nhận được một lỗi cú pháp. Đây có phải là một tính năng mới hơn của SQL ...? Tôi đang sử dụng SQL Server 2005 – froadie

+0

MS-SQL không hỗ trợ Cú pháp SQL99 cho việc này; nên làm việc cho các loại máy chủ sql khác, mặc dù – John

+0

Tôi cũng đã thử nó với SQL Server và nó đã không hoạt động. Nó được hỗ trợ trong DBMS khác mà tôi vừa mới thử. –

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