2009-07-17 149 views
36

Đối với bảng ghi nhật ký người dùng Tôi có trong cơ sở dữ liệu SQL, tôi theo dõi một số tham số tắt của yêu cầu báo cáo. Báo cáo cho phép nhiều ID được chuyển đến nó và tôi lưu trữ tất cả các ID đó trong một cột duy nhất trong cột cơ sở dữ liệu. Nếu đây là một tập hợp dữ liệu chuẩn hóa, chắc chắn sẽ có thiết lập bảng bổ sung cho điều này, nhưng đây là những gì được kế thừa ...Cách đếm số lần ký tự xuất hiện trong cột SQL?

Tôi hiện đã được yêu cầu cung cấp số lượng nhanh lần báo cáo được chạy với hơn 2 ID được chuyển đến báo cáo. Tôi có thể dễ dàng nhận được số lượng hồ sơ có nhiều hơn 1 báo cáo được yêu cầu vì tất cả chúng đều bao gồm dấu phẩy.

Điều tôi cần làm tiếp theo là đếm số lần dấu phẩy xuất hiện trong cột. Làm thế nào để bạn làm điều này trong SQL?

--count the number of times more than 1 report was requested in the record 
select 
    count(*) as cnt 
from 
    [table] 
where 
    RequestedReportParams Like '%,%' 

Trả lời

86
SELECT LEN(RequestedReportParams) - LEN(REPLACE(RequestedReportParams, ',', '')) 
FROM YourTable 
WHERE ..... 

này chỉ đơn giản là so sánh độ dài của cột với các dấu phẩy, với chiều dài của giá trị với các dấu phẩy lấy ra, để cung cấp cho bạn sự khác biệt (tức là số dấu phẩy)

+0

tôi đã tập trung vào việc trả lời câu hỏi của bạn in đậm, chứ không phải là có lẽ những gì bạn thực sự có thể n eed để giải quyết mục tiêu thực tế của bạn. Trong trường hợp này, câu trả lời của con mherren có thể phù hợp hơn. – AdaTheDev

+3

Đã thêm 'LEN' quanh' REPLACE', vì 'REPLACE' trả về một chuỗi, không phải là int, có nghĩa là toán học của bạn sẽ không hoạt động. 1 cho sáng tạo giải quyết, mặc dù! – Eric

+0

Rất tiếc @ tôi quên đặt LEN() vào! - Cảm ơn Eric! – AdaTheDev

7

có vẻ như cách nhanh chóng và dơ bẩn để trả lời các câu hỏi mà bạn đã được yêu cầu sẽ được làm điều này:

select 
    count(*) as cnt 
FROM 
    [table] 
WHERE 
    RequestedReportParams Like '%,%,%' 
+0

Điều đó có vẻ rất đáng sợ, tại sao tôi không nghĩ về nó! Chỉ có vấn đề là tôi sẽ phải tiếp tục bổ sung thêm%, cho mỗi số họ yêu cầu thông tin về ... – RSolberg

+2

+1 để thực sự giải quyết mục tiêu, không phải là câu hỏi được tô đậm! – AdaTheDev

+1

Điều này đã giải quyết được mục tiêu của những gì tôi đã được hỏi ngay bây giờ. Hoàn thành đồng ý với @AdaTheDev, nhưng ý tưởng của @ AdaTheDev đã tiến thêm một bước nữa, giờ đây tôi có thể chỉ ra một phân phối về số lượng, v.v. Cảm ơn rất nhiều vì phản hồi nhanh. Nhiều đánh giá cao. Ngoài ra, chào mừng bạn đến với SO! – RSolberg

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