我在做什么是使用自己的函数,这是返回字符串,现在我想这个列进行排序,而使用它进行排序时,它没有正确排序,因为它一个字符串,当我试图转换为日期时间它会导致错误。转换日期和/或时间从字符串转换失败
任何帮助吗?
非常感谢。
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
编辑,添加功能
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
你能告诉什么样的函数返回,即什么格式的字符串一些例子吗?如果你的函数应该返回一个'datetime'值 - 顾名思义 - 你能改变这个函数吗? – Pondlife
我也给过功能,功能可以不必更新,因为已经用于太多的SP。 –
您似乎将日期转换为字符串 - 很多。保持所有值都为'datetime'值,直到它们实际显示给用户 - 如果可能,请保留转换以显示/格式化甚至不是SQL的代码。而且,好吧,你不能改变这个函数 - 所以创建一个新的实际返回数据的日期时间' –