我正在尝试计算字符串中'*'
的数量,但它给了我错误的计数
DECLARE @LongSentence VARCHAR(MAX)
DECLARE @FindSubString VARCHAR(MAX)
SET @LongSentence = 'Pravin Gaonkar: 29 Jan 2013 17:29:22 : *'
SET @FindSubString = '*'
SELECT LEN(@LongSentence) - LEN(REPLACE(@LongSentence,@FindSubString,''))[Count]
输出
Count
3
原创 - 1但它给了我3个计数
数据库SQL SERVER 2008
答案 0 :(得分:5)
您的查询存在的问题是,替换字符串上的*
会使其以三个尾随空格结束,LEN
不计算这些空格。因此,您的结果是3.尝试使用DATALENGTH
:
DECLARE @LongSentence VARCHAR(MAX)
DECLARE @FindSubString VARCHAR(MAX)
SET @LongSentence = 'Pravin Gaonkar: 29 Jan 2013 17:29:22 : *'
SET @FindSubString = '*'
SELECT DATALENGTH(@LongSentence) -
DATALENGTH(REPLACE(@LongSentence,@FindSubString,''))[Count]
答案 1 :(得分:-2)
这是Oracle查询。我不确定您的SQL版本中是否可以使用LEVEL或ROWNUM代替LEVEL。但它仍然可以帮助你:
SELECT count(*) cnt FROM
(
SELECT DISTINCT(Instr('Pravin Gaonkar: 29 Jan 2013 17:29:22 : *', '*', LEVEL)) char_pos
FROM dual
CONNECT BY LEVEL <= Length('Pravin Gaonkar: 29 Jan 2013 17:29:22 : *')
)
WHERE char_pos > 0
/
SQL>
CNT
---
1
SQL Server 2008 - 使用层次结构方法查询分层表(GetRoot和GetLevel ...) - 与我的示例中使用的Oracle层次结构等效:http://msdn.microsoft.com/en-us/library/3b4f7dae-65b5-4d8d-8641-87aba9aa692d(v=sql.100)