0

私がやっているのは、文字列を返す独自の関数を使用することです。今、この列を注文する必要があります。注文に使用している間、文字列であるため正しく注文されません。日時として変換しようとすると、エラーが発生します。

助けはありますか?

どうもありがとう。

SELECT 
    b.CallId,
    CONVERT(VARCHAR(25), b.ETADate, 103) as'ETADate',
    dbo.getCallEntrySerialNoLastTranDateTime(b.CallEntrySerialNumbersId) AS 'closingDateTime' 
FROM 
    CallEntry AS a, CallEntrySerialNumbers AS b     
WHERE 
    a.ASPId = 2 
    AND a.CompanyId = 3 
    AND a.CallId= b.CallId 
    AND a.ProdCompanyId = 1 
    AND b.CallCaseId IS NOT NULL 
    AND b.CallCaseId NOT LIKE 'NA' 
    AND ProdCategoryid = 1 
    AND a.CallDateTime > dateadd(day, -30, getdate()) 
    AND b.StatusId = 2 
ORDER BY 
    dbo.getCallEntrySerialNoLastTranDateTime(b.CallEntrySerialNumbersId) ASC

// what I tried and causes above error is 
ORDER BY 
    CONVERT(DATE, dbo.getCallEntrySerialNoLastTranDateTime(b.CallEntrySerialNumbersId)) asc

EDIT追加機能

ALTER FUNCTION [dbo].[ASP_getCallEntrySerialNoLastTranDateTime]
(
    @CallEntrySerialNumbersId   bigint

)
RETURNS varchar(500)
AS
BEGIN

    DECLARE @ReturnVal  NVARCHAR(500);
    begin

    select @ReturnVal = ( select Top 1  CONCAT(CONVERT(VARCHAR(10),CallTranEndDateTime,103),' ',CONVERT(VARCHAR(10),CallTranEndDateTime,108))  from  calltransactions  
    where CallEntrySerialNumbersId = @CallEntrySerialNumbersId AND CallTranTypeId = 3 
        order by   CallTranId desc)

    end;    

    RETURN @ReturnVal;
END
4

1 に答える 1

0

これを試してみてください -

SET DATEFORMAT dmy

SELECT *
FROM (
    SELECT 
          b.CallId
        , ETADate = CONVERT(VARCHAR(25), b.ETADate, 103)
        , closingDateTime = dbo.getCallEntrySerialNoLastTranDateTime(b.CallEntrySerialNumbersId)
    FROM dbo.CallEntry a 
    JOIN dbo.CallEntrySerialNumbers b ON a.CallId = b.CallId   
    WHERE a.ASPId = 2 
        AND a.CompanyId = 3 
        AND a.ProdCompanyId = 1 
        AND ISNULL(b.CallCaseId, '') NOT LIKE 'NA' 
        AND ProdCategoryid = 1 
        AND a.CallDateTime > DATEADD(day, -30, GETDATE()) 
        AND b.StatusId = 2 
) d
ORDER BY CAST(d.closingDateTime AS DATE)

ALTER FUNCTION [dbo].[ASP_getCallEntrySerialNoLastTranDateTime]
(
    @CallEntrySerialNumbersId BIGINT
)
RETURNS VARCHAR(30)
AS BEGIN

    DECLARE @ReturnVal VARCHAR(30)

    SELECT @ReturnVal = ( 
        SELECT TOP 1 CONVERT(VARCHAR(10), CallTranEndDateTime, 103) + ' ' + CONVERT(VARCHAR(10), CallTranEndDateTime, 108)
        FROM dbo.CallTransactions  
        WHERE CallEntrySerialNumbersId = @CallEntrySerialNumbersId 
            AND CallTranTypeId = 3 
        ORDER BY CallTranId DESC
    )

    RETURN @ReturnVal

END
于 2013-05-20T11:29:24.773 に答える