我有一个sql列,它是一个100'Y'或'N'字符的字符串。例如:
... YYNYNYYNNNYYNY
获得每行中所有'Y'符号计数的最简单方法是什么。
答案 0 :(得分:273)
此代码段适用于您有布尔值的特定情况:它回答“有多少非N?”。
SELECT LEN(REPLACE(col, 'N', ''))
如果在不同的情况下,您实际上是在尝试计算任何给定字符串中某个字符(例如“Y”)的出现次数,请使用:
SELECT LEN(col) - LEN(REPLACE(col, 'Y', ''))
答案 1 :(得分:82)
在SQL Server中:
SELECT LEN(REPLACE(myColumn, 'N', ''))
FROM ...
答案 2 :(得分:13)
每次都给我准确的结果......
这是我的Stripes字段...... 黄色,黄色,黄,黄色,黄色,黄色,黑色,黄色,黄色,红色,黄色,黄色,黄色,黑色
SELECT (LEN(Stripes) - LEN(REPLACE(Stripes, 'Red', ''))) / LEN('Red')
FROM t_Contacts
答案 3 :(得分:13)
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]
答案 4 :(得分:3)
也许是这样的......
SELECT
LEN(REPLACE(ColumnName, 'N', '')) as NumberOfYs
FROM
SomeTable
答案 5 :(得分:2)
最简单的方法是使用Oracle函数:
SELECT REGEXP_COUNT(COLUMN_NAME,'CONDITION') FROM TABLE_NAME
答案 6 :(得分:1)
试试这个
declare @v varchar(250) = 'test.a,1 ;hheuw-20;'
-- LF ;
select len(replace(@v,';','11'))-len(@v)
答案 7 :(得分:1)
试试这个。 它决定了没有。单字符出现次数以及主字符串中的子字符串出现次数。
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);
答案 8 :(得分:1)
如果要计算具有多个字符的字符串实例的数量,可以使用前面的解决方案和regex,或者此解决方案使用STRING_SPLIT,我认为这是在SQL Server 2016中引入的。还有你' ll需要兼容级别130及更高。
pd.cut(df.distance, [-np.inf, 0.1, 0.5, np.inf], labels=[1,2,3])
0 1
1 1
2 2
3 3
4 3
ALTER DATABASE [database_name] SET COMPATIBILITY_LEVEL = 130
答案 9 :(得分:1)
nickf提供的第二个答案非常聪明。但是,它仅适用于目标子字符串1的字符长度并忽略空格。具体来说,我的数据中有两个前导空格,当右侧的所有字符都被删除时,SQL有助于删除(我不知道这个)。这意味着
“约翰史密斯”
使用Nickf的方法生成12,而:
“乔博格斯,约翰史密斯”
生成10,
“Joe Bloggs,John Smith,John Smith”
生成20.
因此我稍微修改了以下解决方案,这对我有用:
Select (len(replace(Sales_Reps,' ',''))- len(replace((replace(Sales_Reps, ' ','')),'JohnSmith','')))/9 as Count_JS
我确信有人可以想出更好的方法!
答案 10 :(得分:1)
您也可以尝试这个
-- 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
输出:
答案 11 :(得分:1)
以下解决方案帮助从有限制的字符串中找出不存在的字符:
1)使用SELECT LEN(REPLACE(myColumn,'N',``))),但有限制和 在以下情况下输出错误:
SELECT LEN(REPLACE('YYNYNYYNNNYYNY','N',''));
--8-正确SELECT LEN(REPLACE('123a123a12','a',''));
--8-错SELECT LEN(REPLACE('123a123a12','1',''));
--7-错
2)尝试以下解决方案以获取正确的输出:
选择dbo.vj_count_char_from_string('123a123a12','2');
--2-正确选择dbo.vj_count_char_from_string('123a123a12','a');
--2-正确
-- ================================================
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
答案 12 :(得分:0)
这是我在Oracle SQL中用来查看是否有人传递了格式正确的电话号码:
WHERE REPLACE(TRANSLATE('555-555-1212','0123456789-','00000000000'),'0','') IS NULL AND
LENGTH(REPLACE(TRANSLATE('555-555-1212','0123456789','0000000000'),'0','')) = 2
第一部分检查电话号码是否只有号码和连字符,第二部分检查电话号码是否只有两个连字符。
答案 13 :(得分:0)
例如,计算SQL列中字符(a)的计数实例 - &gt; name是列名 &#39;&#39; (并且在doblequote中是空的我用nocharecter替换了一个@&#39;&#39;)
选择len(姓名) - len(替换(姓名,&#39; a&#39;,&#39;&#39;))来自TESTING
选择len(&#39; YYNYNYYNNNYYNY&#39;) - len(替换(&#39; YYNYNYYNNNYYNY&#39;,&#39; y&#39;,&#39;&# 39)) 强>
答案 14 :(得分:0)
如果您需要用超过2种字符计数字符串中的字符,则可以使用某些运算符或 regex 代替'n' -
接受您需要的字符。
SELECT LEN(REPLACE(col, 'N', ''))
答案 15 :(得分:0)
这将返回N的出现次数
select ColumnName, LEN(ColumnName)- LEN(REPLACE(ColumnName, 'N', ''))
from Table