提取SQL存储过程中字符串的某些部分

提取SQL存储过程中字符串的某些部分,sql,string,Sql,String,我现在有这个存储过程。我想将字符串的成功率限制为“40%”这样的百分比。现在字符串的内容是“40%-正在考虑”。最好的方法是什么 CREATE PROCEDURE [dbo].[procActivity_SelectbyOutstandingActivitiesNew] AS SELECT C.[Name] AS [Customer], C.CustomerId AS [CustomerID], E.FirstName + ' ' + E.Surname AS

我现在有这个存储过程。我想将字符串的成功率限制为“40%”这样的百分比。现在字符串的内容是“40%-正在考虑”。最好的方法是什么

CREATE PROCEDURE [dbo].[procActivity_SelectbyOutstandingActivitiesNew]
AS
SELECT  C.[Name] AS [Customer], 
        C.CustomerId AS [CustomerID],
        E.FirstName + ' ' + E.Surname AS [Employee],
        AT.[TypeName] AS [Activity Type],
        A.[ActivityDate] AS ActivityDate,
        A.NextActivityDate,
        A.[ChanceOfSuccess] AS ChanceOfSuccess,
        A.[Comments] AS Comments,
        U.Surname + ' ' + U.FirstName AS [User],
        E.EmployeeId,
        A.ActivityId,
        CONVERT(INT, SUBSTRING(A.ChanceOfSuccess, 0, CHARINDEX ('%',A.ChanceOfSuccess))) AS [Success Percentage],
        A.[IsComplete]

FROM    Customer C
INNER JOIN Activity A ON A.CustomerId = C.CustomerId
INNER JOIN Employee E ON E.EmployeeId = A.EmployeeId AND E.CustomerId = C.CustomerId
INNER JOIN [ActivityType] AT ON A.[ActivityTypeId] = AT.[ActivityTypeId]
INNER JOIN [User] U ON A.[UserId] = U.[UserId]
LEFT OUTER JOIN Activity A2 ON A.CustomerId = A2.CustomerId AND A.UserId = A2.UserId AND A2.ActivityDate > A.ActivityDate
WHERE   C.[IsDeleted] = 0
AND     A.NextActivityDate <= GETDATE()
AND     E.IsDeleted = 0
AND     A.IsDeleted = 0
AND (A2.ActivityId IS NULL OR A2.IsDeleted > 0)
AND CONVERT(INT, SUBSTRING(A.ChanceOfSuccess, 0, CHARINDEX ('%',A.ChanceOfSuccess))) < 100
ORDER BY A.NextActivityDate ASC, Customer, A.ActivityDate ASC, [Success Percentage] DESC
GO
创建过程[dbo]。[procActivity\u SelectByOutstandingActivities New]
作为
选择C.[Name]作为[Customer],
C.CustomerId为[CustomerId],
E.FirstName+“”+E.姓氏为[员工],
在[TypeName]处作为[Activity Type],
A.[ActivityDate]作为ActivityDate,
A.Nextractivitydate,
[偶然的成功]作为偶然的成功,
A.[评论]作为评论,
U.姓氏+“”+U.姓氏为[用户],
E.雇员ID,
A.活动ID,
将(INT,子字符串(A.ChanceOfSuccess,0,CHARINDEX(“%”,A.ChanceOfSuccess))转换为[成功百分比],
A.[完成]
来自客户C
A.CustomerId=C.CustomerId上的内部联接活动A
在E.EmployeeId=A.EmployeeId和E.CustomerId=C.CustomerId上内部加入员工E
[ActivityTypeId]=AT.[ActivityTypeId]上的内部联接[ActivityType]AT
[UserId]=U[UserId]上的内部联接[User]U
A.CustomerId=A2.CustomerId和A.UserId=A2.UserId和A2.ActivityDate>A.ActivityDate上的左侧外部联接活动A2
其中C.[IsDeleted]=0
和A.nextractivitydate(0)
和转换(INT,子字符串(A.ChanceOfSuccess,0,CHARINDEX('%',A.ChanceOfSuccess))<100
按A.NextActivityDate ASC、客户、A.ActivityDate ASC订购,[成功百分比]说明
去

家庭作业?很明显,您没有编写原始查询,因为它已经在做这项工作了

该行:

CONVERT(INT, SUBSTRING(A.ChanceOfSuccess, 0, CHARINDEX ('%',A.ChanceOfSuccess))) AS [Success Percentage],
已经执行了您想要的操作,然后将其转换为int,因此删除该转换,您就应该得到您想要的

DECLARE @v VARCHAR(50) = '40% - Thinking about it'

SELECT @V, SUBSTRING(@V, 0, charindex('%', @V)+1)

以下是一些如何重写代码的提示:

create view [v_OutstandingActivities]
AS
SELECT  C.[Name] AS [Customer], 
        C.CustomerId AS [CustomerID],
        E.FirstName + ' ' + E.Surname AS [Employee],
        AT.[TypeName] AS [ActivityType],
        A.[ActivityDate] AS ActivityDate,
        A.NextActivityDate,
        A.[ChanceOfSuccess] AS ChanceOfSuccess,
        A.[Comments] AS Comments,
        U.Surname + ' ' + U.FirstName AS [UserName],
        E.EmployeeId,
        A.ActivityId,
        replace(A.ChanceOfSuccess, '%', '')+0 AS [SuccessPercentage],
        A.[IsComplete]

FROM    Customer C
INNER JOIN Activity A ON A.CustomerId = C.CustomerId
INNER JOIN Employee E ON E.EmployeeId = A.EmployeeId AND E.CustomerId = C.CustomerId
INNER JOIN [ActivityType] AT ON A.[ActivityTypeId] = AT.[ActivityTypeId]
INNER JOIN [User] U ON A.[UserId] = U.[UserId]
LEFT OUTER JOIN Activity A2 ON A.CustomerId = A2.CustomerId AND A.UserId = A2.UserId 
AND A2.ActivityDate > A.ActivityDate AND (A2.IsDeleted > 0)
WHERE   C.[IsDeleted] = 0
AND     A.NextActivityDate <= GETDATE()
AND     E.IsDeleted = 0
AND     A.IsDeleted = 0
AND replace(A.ChanceOfSuccess, '%', '') < 100
创建视图[v_未完成活动]
作为
选择C.[Name]作为[Customer],
C.CustomerId为[CustomerId],
E.FirstName+“”+E.姓氏为[员工],
在[TypeName]处作为[ActivityType],
A.[ActivityDate]作为ActivityDate,
A.Nextractivitydate,
[偶然的成功]作为偶然的成功,
A.[评论]作为评论,
U.姓氏+“”+U.FirstName作为[用户名],
E.雇员ID,
A.活动ID,
将(A.ChanceOfSuccess,“%”,“)+0替换为[SuccessPercentage],
A.[完成]
来自客户C
A.CustomerId=C.CustomerId上的内部联接活动A
在E.EmployeeId=A.EmployeeId和E.CustomerId=C.CustomerId上内部加入员工E
[ActivityTypeId]=AT.[ActivityTypeId]上的内部联接[ActivityType]AT
[UserId]=U[UserId]上的内部联接[User]U
A.CustomerId=A2.CustomerId和A.UserId=A2.UserId上的左外部联接活动A2
和A2.ActivityDate>A.ActivityDate和(A2.IsDeleted>0)
其中C.[IsDeleted]=0

而A.NextActivityDate则应该将成功的机会存储在单独的整数字段中。另外,这个问题与存储过程没有任何关系,它更多的是关于字符串操作和子字符串不,不是家庭作业。实习工作,我正在做别人以前的工作。我对sql不是很在行。