SQL 在函数调用中转换输入参数的数据类型

SQL Convert datatype of input parameter inside Function call

我有以下功能:

CREATE FUNCTION dbo.ToDotNetDateTime ( @Ticks bigint )
    RETURNS datetime2
AS
BEGIN
    DECLARE @DateTime datetime2 = '00010101';
    SET @DateTime = DATEADD( DAY, @Ticks / 864000000000, @DateTime );
    SET @DateTime = DATEADD( SECOND, ( @Ticks % 864000000000) / 10000000, @DateTime );
    RETURN DATEADD( NANOSECOND, ( @Ticks % 10000000 ) * 100, @DateTime );
END

当我在调用此函数时尝试将 nvarchar 转换为 bigint 时出现错误:

select dbo.ToDotNetDateTime(CAST(UTC_Time AS BIGINT)) FROM OtoSuite_Master_Reply

错误说:将数据类型 nvarchar 转换为 bigint 时出错

您的代码在函数本身中没有从字符串到 bigint 的类型转换。这表明问题出在调用函数 CAST(UTC_Time AS BIGINT).

您可以使用以下方法找到问题值:

select UTC_Time
from OtoSuite_Master_Reply
where try_CAST(UTC_Time AS BIGINT) is null and UTC_Time is not null;

要解决这个问题,您可以只使用 TRY_CAST(),但您应该找到有问题的值并修复它们。

请首先检查 UTC_Time 要转换的有效数值。您可以使用下面的查询,它首先检查 UTC_Time 列是否为数字。

select dbo.ToDotNetDateTime(CAST(UTC_Time AS BIGINT)) FROM OtoSuite_Master_Reply
ISNUMERIC(UTC_Time ) = 1

但是此查询将忽略 ISNUMERIC(UTC_Time ) = 1 为假的值。