Tôi có một cột sql là một chuỗi gồm 100 ký tự 'Y' hoặc 'N'. Ví dụ:
YYNYNYYNNNYYNY ...
Cách dễ nhất để có được số lượng tất cả các ký hiệu 'Y' trong mỗi hàng là gì.
Tôi có một cột sql là một chuỗi gồm 100 ký tự 'Y' hoặc 'N'. Ví dụ:
YYNYNYYNNNYYNY ...
Cách dễ nhất để có được số lượng tất cả các ký hiệu 'Y' trong mỗi hàng là gì.
Câu trả lời:
Trong SQL Server:
SELECT LEN(REPLACE(myColumn, 'N', ''))
FROM ...
Đoạn mã này hoạt động trong tình huống cụ thể mà bạn có boolean: nó trả lời "có bao nhiêu ký tự không phải N?".
SELECT LEN(REPLACE(col, 'N', ''))
Nếu, trong một tình huống khác, bạn thực sự đang cố gắng đếm số lần xuất hiện của một ký tự nhất định (ví dụ: 'Y') trong bất kỳ chuỗi nhất định nào, hãy sử dụng điều này:
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
Điều này đã cho tôi kết quả chính xác mỗi khi ...
Đây là trong trường Stripes của tôi ...
Vàng, Vàng, Vàng, Vàng, Vàng, Vàng, Vàng, Đen, Vàng, Vàng, Đỏ, Vàng, Vàng, Vàng, Đen
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red')
FROM t_Contacts
DECLARE @StringToFind VARCHAR(100) = "Text To Count"
SELECT (LEN([Field To Search]) - LEN(REPLACE([Field To Search],@StringToFind,'')))/COALESCE(NULLIF(LEN(@StringToFind), 0), 1) --protect division from zero
FROM [Table To Search]
LEN(@StringToFind)
.
@StringToFind
sẽ không bao giờ trống hoặc rỗng.
Field To Search
sẽ nhận được phép chia cho 0 vì Len(' ')
trả về 0.
Có thể như thế này ...
SELECT
LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
SomeTable
Cách dễ nhất là sử dụng hàm Oracle:
SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
Điều này sẽ trả về số lần xuất hiện của N
select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', ''))
from Table
thử cái này
declare @v varchar(250) = 'test.a,1 ;hheuw-20;'
-- LF ;
select len(replace(@v,';','11'))-len(@v)
Thử cái này. Nó xác định không. các lần xuất hiện ký tự đơn cũng như các lần xuất hiện chuỗi phụ trong chuỗi chính.
SELECT COUNT(DECODE(SUBSTR(UPPER(:main_string),rownum,LENGTH(:search_char)),UPPER(:search_char),1)) search_char_count
FROM DUAL
connect by rownum <= length(:main_string);
Nếu bạn muốn đếm số phiên bản của chuỗi có nhiều hơn một ký tự, bạn có thể sử dụng giải pháp trước đó với regex hoặc giải pháp này sử dụng STRING_SPLIT, mà tôi tin rằng đã được giới thiệu trong SQL Server 2016. Ngoài ra, bạn sẽ cần khả năng tương thích cấp 130 trở lên.
ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 130
.
--some data
DECLARE @table TABLE (col varchar(500))
INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)'
INSERT INTO @table SELECT 'whaCHAR(10)teverwhateverCHAR(10)'
INSERT INTO @table SELECT 'whaCHAR(10)teverCHAR(10)whateverCHAR(10)~'
--string to find
DECLARE @string varchar(100) = 'CHAR(10)'
--select
SELECT
col
, (SELECT COUNT(*) - 1 FROM STRING_SPLIT (REPLACE(REPLACE(col, '~', ''), 'CHAR(10)', '~'), '~')) AS 'NumberOfBreaks'
FROM @table
Câu trả lời thứ hai do nickf cung cấp rất thông minh. Tuy nhiên, nó chỉ hoạt động với độ dài ký tự của chuỗi con mục tiêu là 1 và bỏ qua khoảng trắng. Cụ thể, có hai khoảng trắng ở đầu trong dữ liệu của tôi, mà SQL sẽ loại bỏ một cách hữu ích (tôi không biết điều này) khi tất cả các ký tự ở phía bên tay phải bị xóa. Điều đó có nghĩa là
" John Smith"
đã tạo 12 bằng phương pháp của Nickf, trong khi:
"Joe Bloggs, John Smith"
đã tạo 10 và
"Joe Bloggs, John Smith, John Smith"
Đã tạo 20.
Do đó, tôi đã sửa đổi giải pháp một chút thành như sau, phù hợp với tôi:
Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS
Tôi chắc rằng ai đó có thể nghĩ ra cách tốt hơn để làm điều đó!
Bạn cũng có thể thử cái này
-- DECLARE field because your table type may be text
DECLARE @mmRxClaim nvarchar(MAX)
-- Getting Value from table
SELECT top (1) @mmRxClaim = mRxClaim FROM RxClaim WHERE rxclaimid_PK =362
-- Main String Value
SELECT @mmRxClaim AS MainStringValue
-- Count Multiple Character for this number of space will be number of character
SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'GS', ' ')) AS CountMultipleCharacter
-- Count Single Character for this number of space will be one
SELECT LEN(@mmRxClaim) - LEN(REPLACE(@mmRxClaim, 'G', '')) AS CountSingleCharacter
Đầu ra:
Giải pháp dưới đây giúp tìm ra không có ký tự nào hiện diện từ một chuỗi có giới hạn:
1) sử dụng SELECT LEN (REPLACE (myColumn, 'N', '')), nhưng giới hạn và đầu ra sai trong điều kiện dưới đây:
SELECT LEN (REPLACE ('YYNYNYYNNNYYNY', 'N', ''));
--8 - Chính xácSELECT LEN (REPLACE ('123a123a12', 'a', ''));
--8 - SaiSELECT LEN (REPLACE ('123a123a12', '1', ''));
--7 - Sai
2) Hãy thử với giải pháp dưới đây để có đầu ra chính xác:
select dbo.vj_count_char_from_string ('123a123a12', '2');
--2 - Chính xácselect dbo.vj_count_char_from_string ('123a123a12', 'a');
--2 - Chính xác
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: VIKRAM JAIN
-- Create date: 20 MARCH 2019
-- Description: Count char from string
-- =============================================
create FUNCTION vj_count_char_from_string
(
@string nvarchar(500),
@find_char char(1)
)
RETURNS integer
AS
BEGIN
-- Declare the return variable here
DECLARE @total_char int; DECLARE @position INT;
SET @total_char=0; set @position = 1;
-- Add the T-SQL statements to compute the return value here
if LEN(@string)>0
BEGIN
WHILE @position <= LEN(@string) -1
BEGIN
if SUBSTRING(@string, @position, 1) = @find_char
BEGIN
SET @total_char+= 1;
END
SET @position+= 1;
END
END;
-- Return the result of the function
RETURN @total_char;
END
GO
Nếu bạn cần đếm các ký tự trong một chuỗi có nhiều hơn 2 loại ký tự, bạn có thể sử dụng thay vì 'n' -
một số toán tử hoặc regex của các ký tự chấp nhận các ký tự bạn cần.
SELECT LEN(REPLACE(col, 'N', ''))
Đây là những gì tôi đã sử dụng trong Oracle SQL để xem liệu ai đó đang chuyển một số điện thoại được định dạng chính xác:
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2
Phần đầu tiên kiểm tra xem số điện thoại chỉ có các chữ số và dấu gạch nối và phần thứ hai kiểm tra xem số điện thoại chỉ có hai dấu gạch nối.
ví dụ để tính số lần đếm của ký tự (a) trong SQL Column -> tên là tên cột '' (và trong doblequote là trống, tôi sẽ thay thế a bằng nocharecter @ '')
select len (name) - len (Replace (name, 'a', '')) từ KIỂM TRA
select len ('YYNYNYYNNNYYNY') - len (Replace ('YYNYNYYNNNYYNY', 'y', ''))