Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PL-SQL转换为SQL Server_Sql_Sql Server_Plsql - Fatal编程技术网

将PL-SQL转换为SQL Server

将PL-SQL转换为SQL Server,sql,sql-server,plsql,Sql,Sql Server,Plsql,我需要有一个sql函数,它接受一个有效的sql Server日期,并返回该日期的月亮阶段。我发现了一个函数,但不幸的是,它是在pl sql中,我不了解它,我可以按原样转换代码,但我不知道如何在sql Server中获取朱利安日期 这是我想要使用的骨架函数 IF OBJECT_ID (N'dbo.fn_phaseOfMoon', N'FN') IS NOT NULL DROP FUNCTION dbo.fn_phaseOfMoon; GO CREATE FUNCTION dbo.fn_ph

我需要有一个sql函数,它接受一个有效的sql Server日期,并返回该日期的月亮阶段。我发现了一个函数,但不幸的是,它是在pl sql中,我不了解它,我可以按原样转换代码,但我不知道如何在sql Server中获取朱利安日期

这是我想要使用的骨架函数

IF OBJECT_ID (N'dbo.fn_phaseOfMoon', N'FN') IS NOT NULL
    DROP FUNCTION dbo.fn_phaseOfMoon;
GO
CREATE FUNCTION dbo.fn_phaseOfMoon (@DATE datetime)
RETURNS VARCHAR(30) AS
BEGIN
    RETURN 'NA';
END
GO

pl sql代码已经找到了,请有人给我指出正确的方向,或者帮助我转换代码?

这是我已经转换成MSSQL的Java代码。看看这是否对你有好处

CREATE FUNCTION dbo.fn_phaseOfMoon (@Date datetime)
RETURNS INT
BEGIN

Declare @y int,
        @m int,
        @d int,
        @c int,
        @e int,
        @b int,
        @jd float

Select @y = DatePart(yy, @Date), @m = DatePart(mm, @Date), @d = DatePart(dd, @Date)
    /*
      calculates the moon phase (0-7), accurate to 1 segment.
      0 = > new moon.
      4 => full moon.
      */

    if (@m < 3) 
        Select @y = @y - 1, @m = @m + 12
    Select @m = @m + 1;

    Select @c = 365.25 * @y, @e = 30.6 * @m
    Select @jd = @c+@e+@d-694039.09  /* jd is total days elapsed */
    Select @jd = @jd / 29.53          /* divide by the moon cycle (29.53 days) */
    Select @b = convert(int, @jd)          /* int(jd) -> b, take integer part of jd */
    Select @jd = @jd - @b          /* subtract integer part to leave fractional part of original jd */
    Select @b = (@jd * 8) + 0.5    /* scale fraction from 0-8 and round by adding 0.5 */
    if @b = 8
        Select @b = 0          /* 0 and 8 are the same so turn 8 into 0 */
    return @b
END
我对这些东西了解不多,所以你必须检查答案是否正确


Java代码源代码:

感谢您提供的解决方案,尽管它的工作原理不同。您好,我还有pl sql函数吗?你能分享吗?谢谢