0

我正在尝试计算'*'字符串中的数量,但它给了我错误的计数

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 服务器 2008

4

2 回答 2

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]
于 2013-01-29T12:59:16.907 回答
-2

这是 Oracle 查询。我不确定您的 SQL 版本中是否可以使用可以代替 LEVEL 的 LEVEL 或 ROWNUM。但它仍然可以帮助您:

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)

于 2013-01-29T13:30:59.437 回答