首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scalar内部修剪填充sql

在Scalar内部修剪填充sql
EN

Stack Overflow用户
提问于 2017-05-10 10:00:05
回答 1查看 394关注 0票数 1

我有一个表值函数

代码语言:javascript
复制
ALTER FUNCTION [dbo].[GetFareBasisDetails](@BookingID INT)
RETURNS TABLE
AS
RETURN
SELECT STUFF(
(
    SELECT ','+REPLACE(PriceDetails.query(N'data(/FareInfo/Price/AB/PQ)').value(N'.',N'nvarchar(max)'),' ',',')
    FROM [Traveler] [T]
    WHERE [T].BookingID=@BookingID
    FOR XML PATH('')
),1,1,'') AS FarePriceBasis;

为了获得FarePriceBasis的值,我在一个应用join和GetFareBasisDetails的存储过程中使用这个函数。sp中的代码块是

因为我在结果中得到了额外的逗号,所以我在sp中修剪它。

代码语言:javascript
复制
CASE 
            WHEN RIGHT(RTRIM(REPLACE([FB].FarePriceBasis,',,',',')),1) = ',' THEN 
                LEFT(REPLACE([FB].FarePriceBasis,',,',','), LEN(REPLACE([FB].FarePriceBasis,',,',',')) - 1)
            ELSE REPLACE([FB].FarePriceBasis,',,',',') END [FarePriceBasis]

我想在函数中移动修剪逻辑。即在sp内,我只能使用FB.FarePriceBasis。所有的修整逻辑都应该在函数GetFareBasisDetails中移动。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-10 10:25:53

我想我一定是遗漏了什么,因为您可以将case语句移到函数中。它不漂亮,毫无疑问有一个更好的解决方案,但你可以这样做。

代码语言:javascript
复制
ALTER FUNCTION [dbo].[GetFareBasisDetails](@BookingID INT)
RETURNS TABLE
AS
RETURN
SELECT CASE WHEN RIGHT(RTRIM(REPLACE([FB].FarePriceBasis,',,',',')),1) = ',' 
              THEN LEFT(REPLACE([FB].FarePriceBasis,',,',','), LEN(REPLACE([FB].FarePriceBasis,',,',',')) - 1)
              ELSE REPLACE([FB].FarePriceBasis,',,',',') END [FarePriceBasis]
FROM  ( SELECT STUFF(
              (
                  SELECT  ','+REPLACE(PriceDetail,' ',',')
                  FROM    [Traveler] [T]
                  WHERE   [T].BookingID=@BookingID
                  FOR XML PATH('')
              ), 1, 1, '') AS FarePriceBasis
      ) FB
GO
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43889196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档